这与以下内容有什么不同?
这里这行代码:
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
构造一个新的String对象(即的oldString
副本),而这行代码:
String newString = oldString;
声明的一个新变量键入java.lang.String
并将其初始化为指向与变量oldString
相同的String对象。
是否有任何情况下两条线会有不同的输出?
绝对:
String newString = oldString;
boolean isSameInstance = newString == oldString; // isSameInstance == true
与
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
// isSameInstance == false (in most cases)
boolean isSameInstance = newString == oldString;
a_horse_with_no_name(见注释)是正确的,当然。的
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
相当于是
String newString = new String(oldString);
减的细微差别WRT彼得Lawrey解释了他的答案编码。
嗯,当然,*一个*不同的是,'字符串newString = oldString;',你仍然只有字符串的一个副本(你只是指向它来自两个变量)。解码/编码会对字符串进行*复制*。这并不重要,因为'String'是不可变的。尽管这可能不是为什么旧代码是这样的; 'String'有更直接的克隆方式('String(String)')。除了测试String类的编码/解码方法之外,我想不出为什么要进行编码/解码。 – 2012-01-13 16:48:47
上下文是否给出了为什么字符串转换可能已经或者有必要的暗示? – 2012-01-13 16:52:22
@ T.J.Crowder:+1,当然!我并不是指实际对象中的差异。感谢您指出了这一点。 – OceanBlue 2012-01-13 18:14:27