函数参数部分中的引用

evrscar2  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(352)

此问题已在此处找到答案

java是“按引用传递”还是“按值传递”((89个答案)
昨天关门了。
有人能解释一下这段代码吗。输出是我感到困惑的地方。modifyobject函数似乎只修改了一个东西(即p),但另一个东西(即s)保持不变。但是我很困惑。有人能解释一下发生了什么事吗。

  1. class Person{
  2. int a = 8;
  3. public int getA() {
  4. return a;
  5. }
  6. public void setA(int a) {
  7. this.a = a;
  8. }
  9. @Override
  10. public String toString() {
  11. return "Person [a=" + a + "]";
  12. }
  13. }
  14. public class TestMutable {
  15. public static void main(String[] args)
  16. {
  17. Person p = new Person();
  18. p.setA(34);
  19. String s = "bar";
  20. modifyObject(s, p); //Call to modify objects
  21. System.out.println(s);
  22. System.out.println(p);
  23. }
  24. private static void modifyObject(String str, Person p)
  25. {
  26. str = "foo";
  27. p.setA(45);
  28. }
  29. }

为什么输出以下内容?i、 str仍然是酒吧,但是person.a现在45岁了?

  1. bar
  2. Person [a=45]
w7t8yxp5

w7t8yxp51#

你可以看到这条线索来了解原因 String 值不会更改,如何使其更改:在java中通过引用传递字符串?

相关问题