【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
java基础(8)数据类型的分类
Java数据类型分为基本数据类型(8种)和引用数据类型。基本类型包括byte, short, int, long, float, double, boolean, char。每种类型有固定占用空间大小,如int占用4字节。字符编码如ASCII和Unicode用于将文字转换为计算机可识别的二进制形式。
68 2
|
3月前
|
Java 程序员
Java数据类型:为什么程序员都爱它?
Java数据类型:为什么程序员都爱它?
50 1
|
2天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
17 4
|
15天前
|
存储 Java 关系型数据库
[Java]“不同族”基本数据类型间只能“强转”吗?
本文探讨了不同位二进制表示范围的计算方法,重点分析了Java中int和char类型之间的转换规则,以及float与int类型之间的转换特性。通过具体示例说明了显式和隐式转换的条件和限制。
30 0
[Java]“不同族”基本数据类型间只能“强转”吗?
|
2月前
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
50 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
1月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
44 4
|
14天前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
17 0
|
2月前
|
存储 Java
Java内置数据类型和实例的详解
Java内置数据类型分为基本和引用两类。基本数据类型包括整型(`byte`、`short`、`int`、`long`)、浮点型(`float`、`double`)、字符型(`char`)和布尔型(`boolean`),用于存储简单的数值;引用数据类型则用于存储对象的引用,包括类(如`String`)、接口和数组。掌握这两类数据类型是Java编程的基础。以下示例展示了各种数据类型的使用方法。
|
2月前
|
Java
java基础(10)数据类型中的整数类型
Java中的整数类型包括byte、short、int和long。整数字面值默认为int类型,加L表示long类型。整数字面值可以是十进制、八进制(0开头)或十六进制(0x开头)。小容量类型(如int)可自动转换为大容量类型(如long),但大容量转小容量需强制转换,可能导致精度损失。
39 2
|
27天前
|
Java 编译器 C++
【编程基础知识】Java基本数据类型
Java的基本类型包括五类九种,涵盖了整型、浮点型、字符型、布尔型和void。成员变量即使未初始化也有默认值,但局部变量必须显式初始化,否则编译会报错。示例代码展示了各种基本类型的默认值和极限值。
31 0