string对象能修改阿。 String a = "a"; a = "b"; 就把a的值修改为b了。exp3应该同不过编译吧 str(Sting out)没定义的。
第三个写错了应该是 public class test{ String output = ""; public static void main(String args[]){ test t = new test(); } test(){ str(output); System.out.println(output); } void str(String output){ int i = 1; output = output + i; } }
String a = "a";
a = "b";
就把a的值修改为b了。exp3应该同不过编译吧
str(Sting out)没定义的。
public class test{
String output = "";
public static void main(String args[]){
test t = new test();
}
test(){
str(output);
System.out.println(output);
}
void str(String output){
int i = 1;
output = output + i; }
}
如改成的str(out); --> str(); 话三个程序是一样的。
str(out); 不能调用str();因为他们的参数不一样,你应该看一下重载。
我不知道你所说的是overring or overloaing,但我的意思是问:String 类创建的对象不是不能对它自身进行修改吗?为什么前两个的结果会输出1呢?
而最后一个是参数传递,它的结果却为空。understand。
java中的String的实例是不能修改内容的。
那些操作符只是产生新的String对象并用引用指向新实例。
void str(String output){
int i = 1;
output = output + i;
}这里的output指局部变量并不是类成员,因此在这里output的引用被改成指
向"1"的引用,如果你在方法内将它输出就会发现它的值是"1"
但是该方法外的output引用的对象并没有改变,它指向的还是原来对象实例,
就是空字符串。
这里生成了一个新实例并用output指向他但这个引用是局部的。
而不是对该字符串的引用。引用还是能修改的。
println方法实参是"abc..."+ i(i不是String类对象)时,会调用
toString方法,而这个方法则会临时创建一个StringBuffer类的对象,
然后在这个对象上操作,最后返回的其实是这个对象。