String类的2种赋值分析

1、字符串常量池

2、String name = new String("你好");

3、String name = "你好";

分析对象在内存中的结构:

常量池--用来存储字符串

你好--是常量;name--是变量

每当new一个对象时,在堆中会生成一个对象,栈中的指针指向堆中。你好是堆内存中存储的值,会将“你好”这个字符串到字符串常量池中去检查,看“字符串常量池”中是否有“你好”这个常量--若没有,就会将“你好”这个字符串存至“字符串常量池”中。


String s1 = new String("你好");

String s2 = "你好";  //最多创建一个字符串对象,有可能不用创建对象

综上,s1在new字符串时,首先在堆中创建对象--“你好”,接着,会将“你好”拿到字符串常量池中再存一遍。(字符串常量池是在堆内存中的)

面试常问:

String s1 = new String("你好");创建几个对象?

回答是:2个 -- 1个是在堆内存中;另一个是在常量池中。

1、在堆中创建的new  2、将“你好”存在字符串常量池中--为了下一次用相同值时,会从常量池中找。

2、简写方式有个好处--会直接让s2到常量池中找,看是否有相同的值,有,直接指向;没有,会在常量池中创建一个“你好”,再让s2指向“你好”。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值