您的位置首页百科问答

Java 基本数据类型

Java 基本数据类型

的有关信息介绍如下:

Java 基本数据类型

Java 提供了8中基本数据类型,6种数字类型(4个整数型,2个浮点型),1个字符型,1种布尔型。

1. 取值范围

2. 整数类型溢出

Java 整数默认是 int 类型,小数默认是 double 类型,思考如下的计算结果存在哪些问题

int a = 10000 * 10000 * 22 * 2;

// 输出:105032704,正常结果:4400000000

System.out.println(a);

计算结果存在问题,int 类型的最大取值是2,147,483,647,44亿已经超出 int 类型的取值范围,即数据溢出了,这个时候就不能再使用 int 类型了,需要使用取值范围更大的整数类型 long 类型。

我们尝试修改一下代码,看看下面哪种写法能正确输出计算结果:

// 写法1:105032704

long a1 = (long)(10000 * 10000 * 22 * 2);

System.out.println(a1);

// 写法2:-4189934592

long a2 = 10000 * 10000 * 22 * (long)2;

System.out.println(a2);

// 写法3:4400000000

long a3 = (long)10000 * 10000 * 22 * 2;

System.out.println(a3);

只有写法3才能正确计算出结果,其他写法都不正确。接下来我们分析一下三种写法的计算步骤,得出他们的问题。

写法1:它分成两块,一块是整数计算、一块是类型转换,类型转换是在整数计算结果出来后执行的,即10000 * 10000 * 22 * 2计算得出105032704后,再把105032704强转成 long 类型。它在整数计算过程中使用的还是 int 类型,还是会出现数据溢出的情况。

写法2:10000 * 10000 * 22,这块整数计算过程中使用的还是 int 类型,已经出现数据溢出,到* (long)2这块后,只是乘以2,且类型自动升级到 long 类型。

写法3:(long)10000,这块先把整个表达式的数据类型自动升级到 long 类型,再做后面的计算,44亿在 long 类型下不会出现溢出情况。

3. Java 表达式类型自动提升

当一个 Java 算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。

Java 定义如下的自动提升规则:

1)所有 byte 型、short 型和 char 型将被提升到 int 型。

2)整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。以下是 Java 表达式中类型提升等级。

4. 默认值

当基本数据类型作为类的成员变量时,即使不显式进行初始化,Java 页会为它们分配一个默认值,防止程序运行时错误。然而,这种保证却并不适用于“局部”变量。

我们知道了基本数据类型在作为类的成员变量时,会有默认值,而这些默认值只是 Java 初始化出来的,不是真实数据。这里我们思考一个问题,数据库表对应的实体类中的字段是使用基本数据类型呢还是使用引用类型呢?

考虑到基本数据类型会存在默认值,影响数据的准确性,所以在数据库表对应的实体类中不建议使用基本数据类型。引用类型的默认值是 null。