Java数据类型

Java数据类型分为:

基本数据类型

引用数据类型

1.基本数据类型

Java语言共有8种基本类型。

1.1 整数型

byte 取值范围(-128~127)2^7

默认值为0

short 取值范围(-32768~32767)2^15

默认值为0

int 取值范围(-2,147,483,648~2,147,483,647)2^31

一般口述答正负21亿即可

默认值为0

long 取值范围(-9,223,372,036,854,775,808~9,223,372,036,854,775,807)2^63

默认值是0L,使用long型整数时后方要加上L。一般用在需要大型整数的场景

比long还要大的基本整数类型没有了,有引用数据类型 BigInteger,它是没有取值范围的。

1.2 浮点数型

float 

单精度,32位

默认值是0.0f

double

双精度,64位

默认值是0.0d

1.3 布尔型

boolean

只表示一位的信息

只有两个取值:true,false

默认值是false

1.4 字符型

char

单一的 16 位 Unicode 字符

最小值是 \u0000(即为0),

最大值是 \uffff(即为65,535 , 即2^16)

可以储存任意的字符,例如 char ch = 'A'

2.引用数据类型

在Java中,引用数据类型类似于C语言中的指针,引用数据类型指向一个对象,那么指向对象的变量就是引用变量,这些变量在声明时被指定为了一个特定的类型,比如Animal,Person等。变量一旦声明后,类型不可更改。

对象与数组都同属于引用数据类型。

所有的引用数据类型的默认值都是null。

一个引用变量可以用来引用任何与之兼容的类型。(这句话摘自菜鸟教程,我始终没弄清含义,只有简单的一个例子:Person person = new Person("name");)

3.包装类

基本数据类型不是对象,所以不能使用类的方法;因此Java针对基本数据类型提供了它们所对应的包装类,八大基本数据类型对应类八种包装类,以引用数据类型的方式来调用。

包装类位于java.lang的包下:

通过上图可以发现,从形式来说除了Integer和Character,与之对应的包装类都是首字母大写。

3.1 拆箱与装箱

装箱:基本类型-->包装类型(或者叫对象类型,引用类型)

拆箱:包装类型-->基本类型

在jdk5.0之前,拆装箱都是手动完成的,装箱通过包装类.valueOf()方法

拆箱使用包装类.intValue()方法。

这边使用了Integer和Double举例,在Integer里有个“128陷阱”,看如下代码:

这段代码的运行结果是什么样?按照正常的思维模式来说,他们的返回应该都为true,但是如果按照java一般都是值传递来说,他们应该都是false,总之,这两次比较的结果应该是一样的。

但是实际的返回是这样的:

第一次是false,第二次是true。这是为什么呢?

我们可以点进Integer.valueOf()方法里看一下

可以看到,当传一个int类型的值时,会先去比较IntegerCache.low 与 IntegerCache.high,如果值在两者之间,那么就不会新创建一个对象,而是从cache数组中直接取值。说到这里应该可以明白IntegerCache.high的值了,

所以,可以得出一个结论,当int值在-127到127之间,自动装箱时是不会新创建对象,而是从一个cache数组中取一个对象出来,由于在java中, “==” 比较是地址,从数组中取出来的对象地址是一样的,而新创建的对象地址是互不相同的,最终导致了上述的情况。

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值