什么是Java中的strcpy?

use*_*568 7 java

什么是Java中的strcpy?

String s1, s2;

s1 = new String("hello");
s2 = s1; // This only copies s1 to s2.
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 13

这个说法:

s2 = s1;
Run Code Online (Sandbox Code Playgroud)

拷贝的价值s1s2.该值只是一个参考,所以现在s1s2指向同一个对象.因此,如果这是一个可变类型(例如StringBuilder,或ArrayList),那么你是正确的.

但是,String是不可改变的.您无法修改对象以更改其文本数据,因此只需复制引用即可.更改值s2以引用不同的字符串(或使其成为null引用)不会更改以下值s1:

String s1 = "hello";
String s2 = s1;
s1 = "Something else";
System.out.println(s2); // Prints hello
Run Code Online (Sandbox Code Playgroud)

如果你真的想要创建一个新String对象,你可以使用你已经(不必要地)使用的构造函数s1:

s2 = new String(s1);
Run Code Online (Sandbox Code Playgroud)

但是,这很少是一个好主意.

  • @amit:是的,我做到了.当从字典文件中读取很多*非常短的行时,标准库*使用*来分配一个至少包含80个字符的后备数组的字符串.执行`line = new String(line)`之间的内存使用差异是巨大的.我相信现在情况好多了. (3认同)

Pet*_*rey 5

字符串是不可变的,所以你永远不需要复制它。(除非在极少数情况下)

例如

s1 = new String("hello");
Run Code Online (Sandbox Code Playgroud)

基本上是一样的

s1 = "hello";
Run Code Online (Sandbox Code Playgroud)

s2 = s1;
Run Code Online (Sandbox Code Playgroud)

基本上是一样的

s2 = "hello";
Run Code Online (Sandbox Code Playgroud)