关于String a =“123“和String b =new String(“123“)的区别

1.String a = "123";

String a = "123",

String b ="123";

 栈中存贮对象的引用(保存着对象的地址值),字符串常量储存在方法区中。
方法区中不含相同的值,因此以此种方式定义的时候a与b中存放的地址值相同。

 

 

因此结果为true;

2.String a= new String(“123”);

String a = new String("123");

String b = new String("123");

用“new+构造器”这种方式创建String对象new一次就在堆空间中开辟一个空间。
用这种方法创建对象在内存中会创建两个对象:一是堆空间中new结构,二是对应的常量池中的数据。
在内存中的图示:

此时a与b储存的是堆中的地址,因此即使他们在方法区的值相同,他们的地址值也是不同的。

 所以结果为false;

3.两种定义不同的方式

String a ="123";

String b = new String("123")

 

 

 b用new定义则字符串对象存放在堆中,因此此时b中储存的是堆空间的地址值。

 a是栈中存贮对象的引用(保存着对象的地址值) 

所以结果为false;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值