同样的两次操作,在方法中执行一下,为什么输出结果却不同?

2020-11-06 20:48发布

问题:

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的值未改变,第二次是直接在当前函数中操作赋值,值会改变



标签: java