java数据怎么在不同类缓存_Java 基础类型高频区缓存 附 equals, ==区别

最近在学Java,这是Java面试中会考的一个基础知识

之前我知道Python是会对[-5,256]之间的小整数调用过一次就会存入缓存,不会再重新创建,因为这些数值较小的数字使用频率很高,反复销毁重建是很浪费资源的。Java中也是如此,只不过范围略有不同

Java的基础数据类型的包装类有:Integer,Long,Double,Float,Boolean,Byte,Short,Character。

其高频缓存区间的缓存范围是:

Double: 无缓存

Float: 无缓存

Character:0~127

Boolean:使用静态final,就会返回静态值

Byte:-128~127

Short:-128~127

Long:-128~127

Integer:-128~127

Integer是唯一一个可以修改缓存范围的包装类。

在VM options加入参数: -XX:AutoBoxCacheMax=555即将缓存区间的最大值改为555.

下面看一下代码实例

Integer num1 = 99;

Integer num2 = 99;

Integer num3 = 128;

Integer num4 = 128;

System.out.println((num1 == num2) + ", " + (num3 == num4));

太不可思议了,答案是: true, false

前面有写到,Interger的缓存范围是 -128~127, 因此128超出了这个范围,num3与num4所储存的内存地址不同,所以判断为false

如果我们把 == 换成equals呢?

System.out.println(num1.equals(num2) + ", "+ num3.equals(num4));

答案变成了: true, true

这里要注意的是 equals 和 == 的区别

equals 判断的是两个变量指向的对象是否相同

== 判断的是两个变量的"值"是否相同

在这个例子中equals判断的是指向的对象也可以理解为这两个表面上的数是否相同,而 == 判断的是两个变量存放的内存地址是否相同,因此结果有了不同

最后不尽兴,用字符串再做个例子

String s1 = "apple";

String s2 = s1.toUpperCase();

String s3 = "APPLE";

System.out.println(s2 == s3);

结果是 false

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值