首页 > 代码库 > String类的2种赋值分析

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指向“你好”。

技术分享

String类的2种赋值分析