Skip to content

本模块适合 Java后端研发(业务岗、架构岗)Java安卓原生研发等 Java 相关岗位的同学。

Java 中的基本数据类型有哪些?它们的大小和取值范围是多少?

Java 中的基本数据类型有 8 种,分别是byteshortintlongfloatdoublecharboolean

  • 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 字节,取值范围是truefalse

首先要理解二进制转十进制的计算方法,这是计算机中最基础的运算。

对于二进制数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-1short的取值范围是-2^15~2^15-1int的取值范围是-2^31~2^31-1long的取值范围是-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 字节,取值范围是truefalse

Java 中的基本数据类型和包装类有什么区别?

Java 中的基本数据类型和包装类的区别主要有以下几点:

  1. 基本数据类型是 Java 语言的一部分,而包装类是 Java 类库中的类。
  2. 基本数据类型是值类型,包装类是引用类型。
  3. 基本数据类型在内存中占用的空间较小,包装类在内存中占用的空间较大。
  4. 基本数据类型的默认值是 0,包装类的默认值是 null。
  5. 基本数据类型和包装类之间可以自动装箱和拆箱。

什么是自动装箱和拆箱?

自动装箱(Boxing)和拆箱(Unboxing)是 JDK 5 中引入的特性,用于基本数据类型和包装类之间的转换,在此之前只能使用Object进行装箱和拆箱。(目前C#等语言仍旧使用object进行装箱和拆箱,因此可以说 Java 的包装类设计解决了自动拆装箱问题)

自动装箱是指将基本数据类型自动转换为包装类,比如int转换为Integerdouble转换为Doubleboolean转换为Boolean等。

自动拆箱是指将包装类自动转换为基本数据类型,比如Integer转换为intDouble转换为doubleBoolean转换为boolean等。

自动装箱和拆箱可以简化代码,提高代码的可读性和可维护性。

判断题:Integer a = 10, b = 10; System.out.println(a == b); 输出为true

正确。因为 Java 中对于-128~127之间的整数,会在常量池当中进行缓存,所以 a 和 b 指向的是同一个对象,超出这个范围就不会进行缓存,会创建新的对象。

讲讲常量池

常量池是 Java 虚拟机中的一块内存区域,用于存放字符串常量、基本数据类型常量和符号引用。常量池分为运行时常量池和类常量池。

运行时常量池是每个类的一部分,用于存放编译期生成的字面量和符号引用。类常量池是每个类的一部分,用于存放编译期生成的字面量和符号引用。

常量池的作用是减少内存的占用,提高性能。常量池中的常量是唯一的,可以减少内存的占用,提高性能。

常量池中的常量是不可变的,一旦创建就不能修改。常量池中的常量是共享的,可以被多个对象共享。

讲讲各基础类型的上下行转换规则

Java 中的基本数据类型之间的转换规则如下:

  1. byte、short、char之间可以相互转换,转换时会自动提升为int类型。
  2. int可以自动转换为long、float、double,但是不能自动转换为byte、short、char
  3. long可以自动转换为float、double,但是不能自动转换为byte、short、char、int
  4. float可以自动转换为double,但是不能自动转换为byte、short、char、int、long
  5. double不能自动转换为其他基本数据类型。