对于字符串的声明有两种方式

对于字符串的声明有两种方式
1、使用常量池:即String a = “aaaaa”;

a存放在栈中,指向常量池中的aaaaa

(常量池中的值不存在相同的值)
若String b=“aaaaa”;就相当于也指向常量池中的aaaaa

!!!!!!!
变量a和b的第一手指向都是同一个值,在常量池中aaaaa只存在一个,所以常量池地址唯一不会变,因此比较的其实是常量池同一个值得地址
a==b为true,这就是你想要的答案!!!!!!!

2、使用堆空间: 即String c=new String(“aaaaa”);
c变量名存放在栈空间,对象new String(“aaaaa”) 存放在堆空间,对象中的值aaaaa则是存在于常量池
变量c的第一手指向则为堆空间的地址,堆空间中new String(“aaaaa”) 可以有多个,所以即便值相同的情况下,用new String()的方式创建的对象去比较 == 两个对象的地址是不同的(堆or常量池)空间地址,所以

是堆空间地址的比较
若 String d=new String(“aaaaa”);

c == d 为false ,尽管值都是aaaaa,但是堆空间地址不一样,所以为false
a ==c 为false ,一个是常量池地址,一个是堆空间地址,不会相等 ,false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值