Sha*_*y96 1 java memory string performance concatenation
我知道Java中的String变量是不可变的,因此不能更改.
String myString = "Hello.";
myString += " ";
myString += "My name is Kevin";
Run Code Online (Sandbox Code Playgroud)
每次我们"添加"某些东西时String(),我们都在有效地创建一个新的String(),但它与它被连接的字符串具有相同的名称.这是否意味着内存中有多个引用变量"myString"?
每次"修改"/连接Stringwith时+=,都会创建一个新String对象并替换以myString新创建的名称命名的引用String.所以不,内存中只有一个引用,但引用指向的对象每次都会更改.字符串是不可变的,因此无法"就地"修改对象.
String是Java中的不可变类.不可变类只是一个无法修改其实例的类.创建实例时,将初始化实例中的所有信息,并且无法修改信息.不可变类有许多优点.
程序员的StackExchange上有一个很好的答案,解释了为什么 String s在Java中是不可变的,以及有关它如何工作的更多细节.
最好的方法是使用StringBuilder()该类:
String myStringBuilder = new StringBuilder("Hello.");
myStringBuilder.append(" ");
myStringBuilder.append("My name is Kevin");
System.out.println(myStringBuilder.toString());
Run Code Online (Sandbox Code Playgroud)
但是,String连接StringBuilder由现代Java编译器自动转换为操作.