字符串和内存

Abh*_*sek -3 java string

class A {



  public void someMethod() {
         String var = "Abhi";
         var = "Abhishek";
  }
}
Run Code Online (Sandbox Code Playgroud)

var变量会将Abhi和Abhishek存储在不同的内存位置还是Abhishek覆盖Abhi

如果我使用这个表达式String var= new String();,那么呢?

Joa*_*uer 8

鉴于此方法:

public void someMethod() {
    String var = "Abhi";
    var = "Abhishek";
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中有3个相关的东西:

  • 有一个名为变量的变量var.此变量存储在堆栈中(因为它是一个局部变量)并且可以保存对某个对象的引用.
  • 有内容的String对象Abhi:它是在var声明后立即引用的第一件事.
  • 有内容的String对象Abhishek:var被修改为在第二行引用此对象var.

因此,就内存而言:两个String对象存储在不同的空间中,彼此无关.var但是,只占用同一个地方(在单次调用期间foo,即).因此,参考Abhi是覆盖一个参考Abhishek.

如果var= new String();在该方法的末尾添加该行,那么该行将执行两项操作:

  1. 创建一个String表示空String和的新对象
  2. 将该新String对象的引用分配给该变量var.

请注意,几乎没有理由使用该String构造函数,因为""(几乎)具有完全相同的效果.