String str = "abc";
str.concat("123");
System.out.println(str);
为啥这样输出还是 abc呢
21 个解决方案
#1
str.concat("123");返回一个新的String,本身没有改变。
#2
String类不是final的吗 为啥我还可以修改值 String s="123";s=s+"666";打印123666
那这个为啥打印123666
#3
s是字符串对象,“123”还是没变,只是s的引用指向了“123666”的那个内存地址吧
#4
我只知道结果 具体原因我也不知道哈
#5
s代表的地址变了啊
#6
我知道结果啊 关键为啥这样呢 不是final不可以改变值的吗
#7
final class 是指类本身不能被继承 ,不是这个属性不可修改,
如果这个属性是final的则不可修改,例如:
final String a = "abc";
这样的字符串不可以修改。
如果这个属性是final的则不可修改,例如:
final String a = "abc";
这样的字符串不可以修改。
#8
String类中concat源码,返回的是一个新字符串,原来的不变。
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}
#9
String 类型的数据值可以改变的
#10
厉害 都看源码了
#11
大牛 String类不是final的吗 为啥我还可以修改值 String s="123";s=s+"666";打印123666
#12
楼主转牛角尖了啊 String s="123";s=s+"666";打印123666 记住就好了
#13
final 是不可以不可以改变值啊,它创建了一个新类啊,你输出
#14
根据concat函数的返回值可以看出return new String(0, count + otherLen, buf);,是返回一个新的对象。final类是不允许继承,你的String s引用并没用final来修饰,所以s引用可以改变指向的对象。执行之后,s引用所指向的对象已经不是原来的123了。而是新创建的一个123666对象。引用没变,只是所指向的对象变了。
#15
final指的是类不能被继承,用于field表示field能修改。
LZ应该说的是mutable和immutable
String类确实是immutable的
所以String s = "abc";
s += "123";
是产生了一个新的String object,然后s引用新的对象
LZ应该说的是mutable和immutable
String类确实是immutable的
所以String s = "abc";
s += "123";
是产生了一个新的String object,然后s引用新的对象
#16
你能不能把你的第一个问题的完整代码写下来
#17
final指的是类不能被继承,用于field表示field能修改。
LZ应该说的是mutable和immutable
String类确实是immutable的
所以String s = "abc";
s += "123";
是产生了一个新的String object,然后s引用新的对象
#18
生成了一个新的String对象,s指向新的对象,原来的string还在内存里
#19
String s="123";s=s+"666";
面试题经常会问这里有几个对象
你弄懂这个就会知道变没变了
面试题经常会问这里有几个对象
你弄懂这个就会知道变没变了
#20
str.concat("123");返回一个新的String,本身没有改变。
盗版啊 盗用我的头像 我第一眼还在奇怪我什么时候回复了
#21
s=s+"666";
s+"666"编译期间就优化为"123666"了
s+"666"编译期间就优化为"123666"了
#1
str.concat("123");返回一个新的String,本身没有改变。
#2
str.concat("123");返回一个新的String,本身没有改变。
String类不是final的吗 为啥我还可以修改值 String s="123";s=s+"666";打印123666
那这个为啥打印123666
#3
s是字符串对象,“123”还是没变,只是s的引用指向了“123666”的那个内存地址吧
#4
我只知道结果 具体原因我也不知道哈
#5
s代表的地址变了啊
#6
s是字符串对象,“123”还是没变,只是s的引用指向了“123666”的那个内存地址吧
#7
final class 是指类本身不能被继承 ,不是这个属性不可修改,
如果这个属性是final的则不可修改,例如:
final String a = "abc";
这样的字符串不可以修改。
如果这个属性是final的则不可修改,例如:
final String a = "abc";
这样的字符串不可以修改。
#8
String类中concat源码,返回的是一个新字符串,原来的不变。
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}
#9
String 类型的数据值可以改变的
#10
String类中concat源码,返回的是一个新字符串,原来的不变。
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}
#11
String类中concat源码,返回的是一个新字符串,原来的不变。
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}
#12
楼主转牛角尖了啊 String s="123";s=s+"666";打印123666 记住就好了
#13
final 是不可以不可以改变值啊,它创建了一个新类啊,你输出
#14
大牛 String类不是final的吗 为啥我还可以修改值 String s="123";s=s+"666";打印123666
String类中concat源码,返回的是一个新字符串,原来的不变。
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}
根据concat函数的返回值可以看出return new String(0, count + otherLen, buf);,是返回一个新的对象。final类是不允许继承,你的String s引用并没用final来修饰,所以s引用可以改变指向的对象。执行之后,s引用所指向的对象已经不是原来的123了。而是新创建的一个123666对象。引用没变,只是所指向的对象变了。
#15
final指的是类不能被继承,用于field表示field能修改。
LZ应该说的是mutable和immutable
String类确实是immutable的
所以String s = "abc";
s += "123";
是产生了一个新的String object,然后s引用新的对象
LZ应该说的是mutable和immutable
String类确实是immutable的
所以String s = "abc";
s += "123";
是产生了一个新的String object,然后s引用新的对象
#16
你能不能把你的第一个问题的完整代码写下来
#17
final指的是类不能被继承,用于field表示field能修改。
LZ应该说的是mutable和immutable
String类确实是immutable的
所以String s = "abc";
s += "123";
是产生了一个新的String object,然后s引用新的对象
#18
生成了一个新的String对象,s指向新的对象,原来的string还在内存里
#19
String s="123";s=s+"666";
面试题经常会问这里有几个对象
你弄懂这个就会知道变没变了
面试题经常会问这里有几个对象
你弄懂这个就会知道变没变了
#20
str.concat("123");返回一个新的String,本身没有改变。
盗版啊 盗用我的头像 我第一眼还在奇怪我什么时候回复了
#21
s=s+"666";
s+"666"编译期间就优化为"123666"了
s+"666"编译期间就优化为"123666"了