==比较包装类和比较String类型需要注意的点

==比较包装类

为了方便看与测试,我提供了图片和代码。
在这里插入图片描述
在这里插入图片描述

Integer a = 1;
Integer b = 1;
System.out.println(a == b); //true
//原因:JVM默认缓存池(缓存)在-128到127之间,如果引用类型变量引用的数值范围在这之间,
//他们引用的是相同的一个对象,用==比较自然就是true

Integer a1 = 128;
Integer b1 = 128;
System.out.println(a1 == b1);//false
//原因:超出了JVM缓存池的范围,他们相当于引用的两个不同的对象,所以地址不相同

Integer c2 = 1;
Integer d2 = new Integer(1);
System.out.println(c2 == d2); //false
//原因:c2引用的是缓存池中的变量,d2是自己在堆中new的变量,引用的是堆中的地址,所以地址不同

Integer a2 = 128;
int b2 = 128;
Double c8 = 128.0;
System.out.println(a2 == b2); //true
System.out.println(c8 == b2); //true
//原因:引用数据类型在于基本数据类型比较时,会自动拆箱成基本类型进行数值比较

Integer a3 = 128;
Integer b3 = 128;
System.out.println((a3 + b3) == (b3 + a3));//true
//原因:如果遇到算数运算符的情况下会自动拆箱进行比较,算数运算符会自动进行数据转换
//==  和  equals不会自动进行数据转换

Integer a5 = 1;
Long b5 = 1L;
//原因:System.out.println(a5 == b5); //编译报错,不同的包装类型不能使用 == 比较

Integer a6 = 1000;
Integer b6 = 1000;
System.out.println(a6 == b6);
//如果不对缓存池进行调节返回false
//如果设置为 -XX:AutoBoxCacheMax=1100   返回true
//设置完当前缓存池的大小 -128 到 1100 所以他们使用的都是缓存池中的值,地址相同

==比较String

为了方便看与测试,我提供了图片和代码。
在这里插入图片描述

String s1 = "a";
String x1 = "a";
System.out.println(s1 == x1); //true
//原因:字符串常量池的概念,一个字符串在常量池中是独一份的,不可被改变的,
//所以两个对象引用的是同一个地址。

String s2 = "b";
String x2 = new String("b");
System.out.println(s2 == x2); //false
//原因:s2字符串在常量池中,x2因为是new的它会在常量池中一份,在堆内存中一份,
//它所指向的地址是堆中的地址,所以两个地址不同

String s3 = new String("c");
String x3 = new String("c");
System.out.println(s3 == x3); //false
//原因:这是两个全新的对象,在堆中占有不同的地址,所以返回false

String s4 = new String("d").intern();
String x4 = new String("d").intern();
System.out.println(s4 == x4); //true
//原因:加上.intern()方法就是标明要使用字符串是常量池中的值,由于字符串常量池中的值是独一份的,
//所以他们指向的是同一个地址。
//用.intern()方法,可以让字符串进行驻留,但在业务代码中滥用 intern,可能会产生性能问题。
//没事别轻易用 .intern(),如果要用一定要注意控制驻留的字符串的数量,并留意常量表的各项指标。

撤了…

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值