首页 新闻 会员 周边

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

0
悬赏园豆:200 [已解决问题] 解决于 2020-11-06 21:43

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;
}
Programmer-杨的主页 Programmer-杨 | 初学一级 | 园豆:6
提问于:2020-11-06 00:28
< >
分享
最佳答案
0

.你们的回答一点也没有解决问题啊。。。建议搜一下java值传递,。
简单的说,str是个对象,它实际保存的是内存地址(比如0x111之类),内存地址里存的是这个 aaa,
你调用方法时,传递的是 aaa 这个值,所以返回给newStr的是 aaabbba没问题,但是 str实际保存的 0x111指向的还是之前的 aaa.

再具体的你搜下就知道了。。随便找个解释给你挂一下,
https://www.zhihu.com/question/31203609

收获园豆:200
WMG-Eight | 小虾三级 |园豆:973 | 2020-11-06 13:32
其他回答(8)
0

第一次操作,你输出的就是str,当然是aaa。
第二次操作,把xxxyyy赋值给了a, 再输出a,所以结果是xxxyyy。
没毛病啊。

ycyzharry | 园豆:25653 (高人七级) | 2020-11-06 01:10

估计是作者理解不到位,建议卡看看JVM内存模型

支持(0) 反对(0) lzj123 | 园豆:158 (初学一级) | 2020-11-06 10:23

@lzj123: 是的 理解没有到位,好的!

支持(0) 反对(0) Programmer-杨 | 园豆:6 (初学一级) | 2020-11-06 21:42
0

你的本意是第一次应该输出newStr,误写成str,test方法并未改变main方法的str值,因为test方法参数不是引用类型

E行者 | 园豆:1761 (小虾三级) | 2020-11-06 07:55

你误会了我的本意

支持(0) 反对(0) Programmer-杨 | 园豆:6 (初学一级) | 2020-11-06 21:42
0

如果支持调试的话,学习下如何调试
不支持调试的话,多打印,多分析

大志若愚 | 园豆:2138 (老鸟四级) | 2020-11-06 09:33

谢谢

支持(0) 反对(0) Programmer-杨 | 园豆:6 (初学一级) | 2020-11-06 21:41
0

请将第一句输出改成: System.out.println(newStr);

起风了~~~~~ | 园豆:211 (菜鸟二级) | 2020-11-06 09:40

为什么要改

支持(0) 反对(0) Programmer-杨 | 园豆:6 (初学一级) | 2020-11-06 21:42
0

把 String newStr = test(str);
改成 str = test(str);

码道至简 | 园豆:204 (菜鸟二级) | 2020-11-06 13:13
0

String是引用类型,只是编译器对其做了特殊处理。

jqw2009 | 园豆:2439 (老鸟四级) | 2020-11-06 14:31

谢谢 是的 我就是要知道怎么做的处理

支持(0) 反对(0) Programmer-杨 | 园豆:6 (初学一级) | 2020-11-06 21:38
0

照这个逻辑,每次调用方法,我的参数都可能被修改?还要ref,out关键字干嘛?

华临天下 | 园豆:1501 (小虾三级) | 2020-11-06 14:50

out、ref关键字是什么鬼?小弟才疏学浅不知道java里还有这两个关键字

支持(0) 反对(0) Programmer-杨 | 园豆:6 (初学一级) | 2020-11-06 21:39

@杨筱斌: 尴尬。。。这个是C#里面的关键字,Java中替代C# ref/out 关键字方案

支持(0) 反对(0) 华临天下 | 园豆:1501 (小虾三级) | 2020-11-09 09:37
0

String属于值传递,所以调用test()方法后str的值未改变,第二次是直接在当前函数中操作赋值,值会改变

风兮挽流云 | 园豆:204 (菜鸟二级) | 2020-11-06 16:40

String是引用数据类型,但是java的设计者就是为了使用String就像使用基本数据类型一样,因此才有的这个设计,我现在要探究的就是为什么会这样

支持(0) 反对(0) Programmer-杨 | 园豆:6 (初学一级) | 2020-11-06 21:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册