问题:
public class API_Boolean {
public static void main(String[] args) {
// 第一次操作
String str = "aaa";
String newStr = test(str);
System.out.println(str); // "aaa"
// 第二次操作
String a = "xxx";
a = a + "yyy";
System.out.println(a); // "xxxyyy"
}
public static String test(String s) {
s = s + "bbb";
return s;
}
回答1:
.你们的回答一点也没有解决问题啊。。。建议搜一下java值传递,。
简单的说,str是个对象,它实际保存的是内存地址(比如0x111之类),内存地址里存的是这个 aaa,
你调用方法时,传递的是 aaa 这个值,所以返回给newStr的是 aaabbba没问题,但是 str实际保存的 0x111指向的还是之前的 aaa.
再具体的你搜下就知道了。。随便找个解释给你挂一下,
https://www.zhihu.com/question/31203609
回答2:
第一次操作,你输出的就是str,当然是aaa。
第二次操作,把xxxyyy赋值给了a, 再输出a,所以结果是xxxyyy。
没毛病啊。
回答3:
你的本意是第一次应该输出newStr,误写成str,test方法并未改变main方法的str值,因为test方法参数不是引用类型
回答4:
如果支持调试的话,学习下如何调试
不支持调试的话,多打印,多分析
回答5:
请将第一句输出改成: System.out.println(newStr);
回答6:
把 String newStr = test(str);
改成 str = test(str);
回答7:
String是引用类型,只是编译器对其做了特殊处理。
回答8:
照这个逻辑,每次调用方法,我的参数都可能被修改?还要ref,out关键字干嘛?
回答9:
String属于值传递,所以调用test()方法后str的值未改变,第二次是直接在当前函数中操作赋值,值会改变