当前位置: 技术问答>java相关
请问String类的实例真的是不能修改(immutable)的吗?
来源: 互联网 发布时间:2015-10-05
本文导语: 如果不能被修改,那么如下的程序如何解释呢? public class AString { public static void main( String[] args ) { String str ="ABCDEFG"; System.out.println( "str = "" + str + """ ); System.out.println( "str.length() =...
如果不能被修改,那么如下的程序如何解释呢?
public class AString {
public static void main( String[] args ) {
String str ="ABCDEFG";
System.out.println( "str = "" + str + """ );
System.out.println( "str.length() = " + str.length() );
str = str + "HIJK";
System.out.println("str = "" + str + """);
System.out.println("str.length() = " + str.length());
str += "LMNOP";
System.out.println("str = "" + str + """);
System.out.println("str.length() = " + str.length());
}
}
public class AString {
public static void main( String[] args ) {
String str ="ABCDEFG";
System.out.println( "str = "" + str + """ );
System.out.println( "str.length() = " + str.length() );
str = str + "HIJK";
System.out.println("str = "" + str + """);
System.out.println("str.length() = " + str.length());
str += "LMNOP";
System.out.println("str = "" + str + """);
System.out.println("str.length() = " + str.length());
}
}
|
str = str + "HIJK";
可能被解释为
str = new StringBuffer().append(str).append("HIJK").toString()
下一句同理
可能被解释为
str = new StringBuffer().append(str).append("HIJK").toString()
下一句同理
|
你先明白内存中的字符串以及指向这些字符串的引用变量。
String str ="ABCDEFG";
str = str + "HIJK";
这个时候str已经没有指向"ABCDEFG"了,指向新的字符串"ABCDEFGHIJK"。
使用的内存地址都不同的。
String str ="ABCDEFG";
str = str + "HIJK";
这个时候str已经没有指向"ABCDEFG"了,指向新的字符串"ABCDEFGHIJK"。
使用的内存地址都不同的。
|
String 对象被创建后是不能被改变的。
你上面程序只看到表面。每次需要改变字符串的时候都要创建一个新的String
对象来保存新的内容。原始的字符串不变。
其实改变的是STring引用的变量指向另外的String对象。
正如楼上所说,StringBuffer包含创建后可被改变的字符串。
你上面程序只看到表面。每次需要改变字符串的时候都要创建一个新的String
对象来保存新的内容。原始的字符串不变。
其实改变的是STring引用的变量指向另外的String对象。
正如楼上所说,StringBuffer包含创建后可被改变的字符串。
|
String还是final的呢.
因为它是如此重要的一个类.
创建后就不能修改.
因为它是如此重要的一个类.
创建后就不能修改.
|
string实力是不能定长的,一旦实力后,长度是不可变的,既不可修改。
但是如下:
String s="dd";
s=s+"a";
其实是把s指想了新的地址。
但是如下:
String s="dd";
s=s+"a";
其实是把s指想了新的地址。
|
String s = "aa";
s = s + "bb";
s结果是:aabb
s的地址已经改变,不是原先初始化的地址。
String对象每执行一个‘+’操作,都需要new String一次,
所以对String对象进行‘+’操作时效率非常的低,
所以对于字符串的相加不要用‘+’,用字符串的连接
s = s + "bb";
s结果是:aabb
s的地址已经改变,不是原先初始化的地址。
String对象每执行一个‘+’操作,都需要new String一次,
所以对String对象进行‘+’操作时效率非常的低,
所以对于字符串的相加不要用‘+’,用字符串的连接