String和Integer中的==

1.String中的"=="

String a = "abc";
String b = "ab" + "c";
System.out.println("a == b >"+(a == b));
String x = "ab";
String c = x + "c";
System.out.println("a == b >"+(a == c));
String d = new String("abc");
String e = new String("abc");
System.out.println("d == e > "+(d == e));

结果

a == b >true
a == b >false
d == e > false

解释:String b = “ab”+“c"在编译阶段,会把这句优化成String b = “abc”,此时会先去String常量池中寻找是否有abc这个字符串,如果存在,则会让b直接指向该字符串,否则会创建该字符串,并将该字符串放入字符串常量池中。
而String x = “ab”,String c = x + “c”,此时会先在字符串常量池中创建字符串"ab”,执行String c = x + "c"由于x是变量,无法在编译阶段就确定x的值,因此会创建一个新的String对象,此对象的值为abc。
String d = new String(“abc”);和 String e = new String(“abc”);都会创建两个String类型的变量,其地址是不一样的,因此会为false

2.Integer的"=="

Integer t0 = 0;
Integer t1 = 1;
t0 = t0 + 1;

Integer t2 = 127;
Integer t3 = 127;

Integer t4 = 128;
Integer t5 = 128;

System.out.println("t0 == t1 >"+(t1 == t0));
System.out.println("t2 == t3 >"+(t2 == t3));
System.out.println("t4 == t5 >"+(t4 == t5));

结果

t0 == t1 >true
t2 == t3 >true
t4 == t5 >false

解释:Integer t0 = 0此时会触发装箱,创建一个值为0的Integer对象,此时会直接从缓存中返回值为0的Integer的对象。因为缓存里存放了值为-128-127的Integer对象。当t0 += 1时,此时也发生了拆箱和装箱,返回的也是缓存里的值为1的Integer对象,和t1指向的对象是同一个对象。但是当大于等于128之后就是创建新的Integer对象,因此t4 == t5返回false。因为指向的是不同的对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值