访谈:初始化String str =“abc”时内存中会发生什么; String str1 =“abc”; String str =“xyz”

时间:2014-05-08 06:22:11

标签: java string memory

最近我参加了一次采访,他们问了这个我无法回答的问题。

初始化时内存中会发生什么

String str = "abc"; 
String str1 = "abc"; 
String str = "xyz";

3 个答案:

答案 0 :(得分:2)

将其视为像这样,

  1. 首次使用" abc" 初始化变量Str,然后字面值 " abc&# 34; 字符串池中获取内存,因此变量Str可以引用此" abc"

    Str --------------------------------> abc

  2. On Second Step,以类似方式对 String Pool 中的同一文字进行另一个变量引用。

    Str --------------------------------> abc< ------------------------------- Str1

  3. 在最后一步中,如果考虑String Str,则Error会出现如下情况: -

    variable Str is already defined

    相反,我将Str = "xyz"执行此操作New文字将获取字符串池中的内存,Str之前的引用将被删除并且新参考将被分配。

    Str ----------- X -------------> abc< ----------------------- Str1

    Str --------------------------> xyz

  4. 最后我们会得到这个,并且在字符串池

    中有2个文字abcxyz

    Str --------------------------> xyzStr1 --------------------------> abc

答案 1 :(得分:1)

假设第三个变量应该有不同的名称:

在编译时,相同的"abc"字符串将与"xyz"一起被拉入字符串池。因此,最终会有两个String变量指向同一个"abc"实例,另一个指向"xyz"

答案 2 :(得分:0)

将在String常量池(SCP)中创建一个字符串对象,其内容为

 "abc"

1. str引用将指向该对象。

创建第二个对象jvm时会检查是否相同" abc" SCP中是否提供内容 在你的情况下已经可用

2 str1将指向现有对象

3. String str="xyz"str再次指向abc内容对象我们分配给xyz

Code will not compile as you are using duplicate `str` variable