java 0l是多少_Java 基本数据类型

本文详细介绍了Java中的八种基本数据类型,包括整数类型、浮点数类型、字符类型和布尔类型,并讨论了这些类型之间的自动转换和强制转换规则。此外,还探讨了基本类型与封装类之间的比较方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、四大基本数据类型的分类

1. 整数类型:byte 、short 、int 、long

2. 浮点数类型:float 、double

3. 字符类型:char

4. 布尔类型:boolean

二、八种基本数据类型

基本数据类型

默认值

字节

取值范围

封装类

byte(字节型)

0

1

-128 ~ 127

(-27~27-1)

Byte

short(短整型)

0

2

-32768 ~ 32767

(-215~215-1)

Short

int(整型)

0

4

-2147483648 ~ 2147483647

(-231~231-1)

Integer

long(长整型)

0L 或 0l

8

-9223372036854775808~9223372036854775807

(-263~263-1)

Long

float(单精度浮点型)

0.0F 或 0f

4

3.402823e+38~1.401298e-45

Float

double(双精度浮点型)

0.0

8

1.797693e+308~4.9000000e-324

Double

char(字符型)

\u0000

2

Character

boolean(布尔型)

false

不确定

Boolean

二、基本数据类型之间的转换

显然 boolean 与其他7种类型的数据都不能进行转换,其他的7种数据类型,它们之间都可以进行转换,转换时可能会造成精度损失。

转换分为自动转换和强制转换:

自动转换(隐式):无需任何操作。

强制转换(显式):需使用转换操作符(type)。

可以将6种数据类型按下面顺序排列:

byte < short < int < long

如果从小到大转换,那么可以直接转换。而从大到小,或者是 char 和其他6种数据类型转换,必须使用强制转换。

1. 自动转换:

自动转换时发生扩宽转换(widening conversion)。因为较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。

自动转换时需要注意的几点:

(1) 在自动转换中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度损失。

》int --> float

》long --> float

》long --> double

》float --> double without strictfp

除了可能的精度损失外,自动转换不会出现任何的运行时异常(Runtime Exception)。

(2) char 转换为其他6种数据类型时,会自动转换为ASCII码表中对应的数字。

(3) byte, char, short 类型的数据在参与运算时会自动转换为int类型,但当使用 ''+=" 运算符时就不会产生类型转换,

例如 short s1= 1; s1=(short) (s1+1) 。short s2 = 1;s1+=1。

2. 强制转换:

如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。强制转换采用转换操作符"( )"。严格地说,将 byte 转为 char 不属于缩小转换,因为从byte到char的过程其实是byte-->int-->char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模发生变化。

如果整数的值超出了byte所能表示的范围,结果将对byte类型的范围取余数。例如 a=256 超出了 byte 的范围,所以将 257 除以 byte 的范围上限(256)取余数得到 b=1;需要注意的是,当a=200时,此时除以 256 取余数应该为 -56,而不是200。

将浮点数型转换成整数类型的时候,会发生截尾(truncation),也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型的范围,同样会将对目标类型的范围取余数。

7种基本类型转换总结如下图:

6c03a88cc8018267f8790211c7cff4c4.png

3. 赋值及表达式中的类型转换

(1)字面值赋值:

在使用字面值对整数赋值的过程中,可以将 int 赋值给 byte short ,只要不超出范围。这个过程中的类型转换时自动完成的,但是如果你试图将 long 赋给 byte,即使没有超出范围,也必须进行强制类型转换。例如 byte b = 10L;是错的,要进行强制转换。

(2)表达式中的类型自动提升:

除了赋值以外,表达式计算过程中也可能发生一些类型转换。在表达式中,类型提升规则如下:

所有 byte/short/char 都被提升为 int。

如果有一个操作数为 long ,整个表达式提升为 long。float 和 double情况也一样。

三、其他

1. "=="和"equals()"方法的比较:

(1) 基本数据类型和封装类进行“==”运算符的比较,封装类将会自动拆箱后再进行比较。

(2) 两个Integer 进行“==”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。

(3) 两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回 true。

(4) 封装类调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行(3)中的比较。

2.char 能不能存储一个中文汉字?为什么?

在 C/C++ 语言中,char 类型占 1 个字节,而汉字占 2 个字节,所以不能存储。

在 Java 语言中,char 类型占 2 个字节,而且 Java 默认采用 Unicode 编码,一个 Unicode 码是 16 位,所以一个 Unicode 码占两个字节,Java 中无论汉字还是英文字母,都是用 Unicode 编码来表示的。所以,在Java 中,char 类型变量可以存储一个中文汉字。

参考资料:

boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.

Java 官方文档对 boolean 的占用字节大小并不是精确定义的。

[2] The Java Virtual Machine Specification  简书@马剑威

《Java虚拟机规范》书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。

[3] Java 基本数据类型 - 四类八种 知乎@韦庆明

[4] Java关键字-strictfp CSDN@zmken497300

[5] Java 八种基本类型和基本类型封装类 博客园@戏路很宽丶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值