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指向“你好”。
时间: 2024-10-11 06:27:03