本模块适合 Java后端研发(业务岗、架构岗)、Java安卓原生研发等 Java 相关岗位的同学。
Java 中的基本数据类型有哪些?它们的大小和取值范围是多少?
Java 中的基本数据类型有 8 种,分别是byte、short、int、long、float、double、char、boolean。
byte:1 字节,取值范围是-128~127。short:2 字节,取值范围是-32768~32767。int:4 字节,取值范围是-2147483648~2147483647。long:8 字节,取值范围是-9223372036854775808~9223372036854775807。float:4 字节,取值范围是-3.4028235E38~3.4028235E38。double:8 字节,取值范园是-1.7976931348623157E308~1.7976931348623157E308。char:2 字节,取值范围是0~65535。boolean:1 字节,取值范围是true和false。
首先要理解二进制转十进制的计算方法,这是计算机中最基础的运算。
对于二进制数1101,我们可以以 i 作为下标,x 作为当前位置上的数,从零开始,从右往左依次递增编号。则每一位可以转换为x*2^i,然后将所有位的值相加即可得到十进制数,即1*2^3+1*2^2+0*2^1+1*2^0=13。
接下来我们可以得到记忆各类型位数的最简单的方法:
一个字节就是 8 位,第一位如果是符号位,那么剩下的 7 位就是数值位,所以byte的取值范围是-2^7~2^7-1,short的取值范围是-2^15~2^15-1,int的取值范围是-2^31~2^31-1,long的取值范围是-2^63~2^63-1。
对于浮点数,采用IEEE 754标准,float是 32 位,包含 1 个符号位、8 个指数位和 23 个尾数位,double是 64 位,包含 1 个符号位、11 个指数位和 52 个尾数位。
对于char,采用 Unicode 编码,2 字节,取值范围是 0~2^16-1。
对于boolean,1 字节,取值范围是true和false。
Java 中的基本数据类型和包装类有什么区别?
Java 中的基本数据类型和包装类的区别主要有以下几点:
- 基本数据类型是 Java 语言的一部分,而包装类是 Java 类库中的类。
- 基本数据类型是值类型,包装类是引用类型。
- 基本数据类型在内存中占用的空间较小,包装类在内存中占用的空间较大。
- 基本数据类型的默认值是 0,包装类的默认值是 null。
- 基本数据类型和包装类之间可以自动装箱和拆箱。
什么是自动装箱和拆箱?
自动装箱(Boxing)和拆箱(Unboxing)是 JDK 5 中引入的特性,用于基本数据类型和包装类之间的转换,在此之前只能使用Object进行装箱和拆箱。(目前C#等语言仍旧使用object进行装箱和拆箱,因此可以说 Java 的包装类设计解决了自动拆装箱问题)
自动装箱是指将基本数据类型自动转换为包装类,比如int转换为Integer,double转换为Double,boolean转换为Boolean等。
自动拆箱是指将包装类自动转换为基本数据类型,比如Integer转换为int,Double转换为double,Boolean转换为boolean等。
自动装箱和拆箱可以简化代码,提高代码的可读性和可维护性。
判断题:Integer a = 10, b = 10; System.out.println(a == b); 输出为true。
正确。因为 Java 中对于-128~127之间的整数,会在常量池当中进行缓存,所以 a 和 b 指向的是同一个对象,超出这个范围就不会进行缓存,会创建新的对象。
讲讲常量池
常量池是 Java 虚拟机中的一块内存区域,用于存放字符串常量、基本数据类型常量和符号引用。常量池分为运行时常量池和类常量池。
运行时常量池是每个类的一部分,用于存放编译期生成的字面量和符号引用。类常量池是每个类的一部分,用于存放编译期生成的字面量和符号引用。
常量池的作用是减少内存的占用,提高性能。常量池中的常量是唯一的,可以减少内存的占用,提高性能。
常量池中的常量是不可变的,一旦创建就不能修改。常量池中的常量是共享的,可以被多个对象共享。
讲讲各基础类型的上下行转换规则
Java 中的基本数据类型之间的转换规则如下:
byte、short、char之间可以相互转换,转换时会自动提升为int类型。int可以自动转换为long、float、double,但是不能自动转换为byte、short、char。long可以自动转换为float、double,但是不能自动转换为byte、short、char、int。float可以自动转换为double,但是不能自动转换为byte、short、char、int、long。double不能自动转换为其他基本数据类型。