9

Java中的strcpy是什么?

String s1, s2;

s1 = new String("hello");
s2 = s1; // This only copies s1 to s2.
4

5 回答 5

16

这个说法:

s2 = s1;

将 的值复制s1s2。该值只是一个引用,所以现在s1s2引用同一个对象。因此,如果这是一个可变类型(例如StringBuilder,或ArrayList),那么您应该担心。

然而,String是不可变的。您不能修改对象来更改其文本数据,因此只需复制引用就足够了。更改 的值s2以引用不同的字符串(或使其成为null引用)不会更改 的值s1

String s1 = "hello";
String s2 = s1;
s1 = "Something else";
System.out.println(s2); // Prints hello

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

s2 = new String(s1);

然而,这很少是一个好主意。

于 2012-08-29T11:52:40.987 回答
6

String 是不可变的,因此您永远不需要复制它。(极少数情况除外)

例如

s1 = new String("hello");

基本上是一样的

s1 = "hello";

s2 = s1;

基本上是一样的

s2 = "hello";
于 2012-08-29T11:53:19.463 回答
0

Nos2将与 . 一起引用新创建的字符串对象s1

于 2012-08-29T11:52:59.777 回答
0
String s1, s2;

s1 = new String("hello");
s2 = s1; // This only copies s1 to s2. Am I right?

s1="adsfsdaf";

System.out.println(s2);
System.out.println(s1);

你是对的 s1 和 s2 打印的字符串不是同一个字符串...但是在对对象执行此操作时,一个对象中所做的更改会影响另一个对象...需要克隆对象..字符串没有问题

于 2012-08-29T11:56:16.900 回答
0

String Constructor 很容易完成这项工作,因为 java 中的字符串对象是不可变的

String st="hello";
String st1=new String(st);

输出将是 st1 是你好

于 2012-08-29T11:58:16.730 回答