【Java SE】基本数据类型(下)

简介: 本期我们正式开始进入 Java 的学习,在正式开始之前,我们需要简单的认识下 Java 中的常量。

3.4 浮点家族变量

public class TestDemo {
    public static void main(String[] args) {
        float f = 10.2F;
        System.out.println(Float.MAX_VALUE); //打印 float 能存储的最大值
        System.out.println(Float.MIN_VALUE); //打印 float 能存储的最小值
        double d = 12.5;
        System.out.println(Double.MAX_VALUE); //打印 double 能存储的最大值
        System.out.println(Double.MIN_VALUE); //打印 double 能存储的最小值
    }
}

doublefloat 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。

3.5 布尔类型变量

public class TestDemo {
    public static void main(String[] args) {
        boolean b = false;
        System.out.println(b);
    }
}

这里有几点需要注意:

  • boolean 类型的变量只有两种取值 truefalse
  • Java 中布尔类型不能与其他类型互相转换,不存在 0 为假 非0 为真的说法
  • Java 虚拟机规范中,并没有规定 boolean 占几个字节,在 Oracle 公司的虚拟机实现中 boolean 占 1 个字节

4、类型转换

4.1 什么是类型转换

在我们之前学习C语言的时候,就已经接触过类型转换了,类型转换简单来说,就是把一个数据类型转换成不同的类型, Java作为一个强类型编程语言,在不同类型变量之间相互赋值的时候,会有比C语言更严格的校验。

举一个很简单的例子,在C语言中,你把一个 double 变量直接赋给一个 int 变量时编译器最多报一个 warning 但是仍然可以编译通过,而在Java中则会直接编译失败,这是我们就需要用到强制类型转换!

4.2 隐式类型转换

所谓隐式类型转换,就是我们不需要手动转换,编译器已经帮我们转换了,最显然的例子就是,当一个数据范围小的存到数据范围大的中编译器会自动帮我们完成转换:

public class TestDemo {
    public static void main(String[] args) {
        /**
         * 隐式类型转换 -> 数据范围小的数转为数据范围大的时候!
         * 注意:不相关的类型不能互相转化 例如:布尔类型和值类型
         */
        int a  = 10;
        long l = 100;
        l = a; //编译器会将 a 转换为 long,然后进行赋值
        float f = 3.14F;
        double d = 5.12;
        d = f; //编译器会将 f 转换为 double,然后进行赋值
    }
}

4.3 强制类型转换

强制类型转换,就好比一个水壶它只能装1升水,但是你硬要装2升水,显然多的水会溢出,也就是被丢弃,在计算机中,当一个数在一个类型能表示的范围之外,那么强制类型转换显然是可能会丢失数据的!

public class TestDemo {
    public static void main(String[] args) {
        /**
         * 显式类型转换 -> 数据范围大的数转为数据范围小的时候需要显式类型转换
         * 注意:不想关的类型不能互相转化 例如:布尔类型和值类型
         */
        int a = 10;
        long l = 100;
        a = (int)l; //long -> int  数据范围由大到小,需要强转,否则编译失败
        byte = (byte)288; //288默认是int,超过了byte的存储范围,需要强转,否则编译失败
    }
}

5、类型提升

5.1 int与long之间的那些事

在Java中,针对类型检查是很严格的,就比如上面,如果你把一个类型大的放到类型小的就会报错,那如果我们将 int类型与long类型相加会发生什么呢?

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        long l = 100;
        int c = a + l; //编译报错
        long l2 = a + l; //编译通过
    }
}

我们先来看到编译报错那条语句,为什么会编译报错?当我们在进行不同类型运算的时候,范围小的会被提升成范围大的,在这个代码中,也就是 a 被提升成 long 类型进行运算,long + long 最后的结果肯定是一个 long 类型的值,所以在赋值给一个 int 类型变量会报错,我们可以将他们最后的结果强转成 int 但是可能是会造成数据丢失。

当然,如果我们 int 类型变量与 double类型变量运算,也是会先把 int 提升到 double 的,这个下来自己可以动手去一一测试一下。

5.2 小于四个字节的类型变量如何运算?

目前我们已知小于四个字节的类型有:bytecharshort 那么他们之间的变量运算又是怎么一回事呢?

这里发现报错了,int 转到 byte 显然是不行的,通过代码,我们可以看到,在不满足4个字节大小的类型变量,会先提升到 int 类型,在进行运算,那么显然他们的计算结果肯定也是 int 当一个 int 类型值放入一个 byte 类型变量中肯定是不行的,所以这里有两个解决办法:将他们的结果强制类型转换,或者拿一个整型变量来接收他们计算的结果值。

相关文章
|
2月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
207 2
|
2月前
|
Java Go 开发工具
【Java】(2)Java数据类型阐述、基本数据类型的占用和范围、二进制的讲述
数据的一种表示形式。十进制表示满十进一原则。二进制表示满二进一原则。例如:十进制例如:二进制计算机在任何情况下都只能识别二进制。
143 1
|
3月前
|
安全 Java
使用Java多态性进行数据类型转换
以上示范了如何通过多态性来执行安全有效地对于Java对象间相互之间进行正确方式与场合下正确格式与条件限定内对于各个层级关系内部成员及其功能调取与应有操作处理过程,并通过 `instanceof`关键字确保了程序运行期间遵循逻辑合理并符合预设规则条件限定内正常工作流程而无需担忧潜藏风险问题出现可能带来影响结果质量问题情况存在可能。
166 12
|
3月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
466 1
|
4月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
5月前
|
存储 人工智能 JavaScript
Java中的数据类型转换
本文介绍了 Java 中常见的数据类型转换方法,涵盖字符串与整型、长整型、浮点型、布尔型及日期类型的相互转换,并讲解了可能出现的异常和处理方式。
261 0
|
6月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
212 0
|
8月前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
418 0
|
9月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
185 13
|
9月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
285 9