JavaFishYu 2022-05-22 17:35 采纳率: 100%
浏览 53
已结题

静态方法中的局部变量和其他对象进行二次赋值对原来值不影响?求解惑

public class Demo1 {
public static void main(String[] args) {
String s = "hello";
int a = 1;
Point p = new Point(1, 2);
Collection c = new ArrayList();
c.add(p);
test(s, a, p, c);
System.out.println("s:"+s);
System.out.println("a:"+a);
System.out.println("p:"+p);
System.out.println("c:"+c);
}
public static void test(String s,int a,Point p,Collection c){
a++;
s= s + "world";
p.setX(3);
p = new Point(4, 5);
c.clear();
c.add(p);
c = new ArrayList();
p.setX(7);
c.add(p);
}
}

运行结果及报错内容

s:hello
a:1
p:Point{x=3, y=2}
c:[Point{x=7, y=5}]

我的解答思路和尝试过的方法

为什么结果不是
s:helloworld
a:2
p:Point{x=7, y=5}
c:[Point{x=7, y=5}]

  • 写回答

1条回答 默认 最新

  • Tokey_W 2022-05-22 20:36
    关注

    java方法的中你传入的参数是值传递
    意思就是相当于复制了一份传了过去
    test(s, a, p, c);
    你的这里的s是传入的复制的字符串 因此test修改的是复制的字符串 跟main方法中的字符串没有关系
    a是基本数据类型 传入的赋值的a 因此test中修改a不会影响main方法中的a
    但是你的p和c是对象 传入的复制的引用
    相当于test在改的是引用中的数据 因此会影响main方法中的p ,和c

    举例 分为基本数据类型和引用数据类型
    基本数据类型 传入的参数 相当于 你复制的一个苹果给他 test在怎么修改就不会影响你自己的苹果 ,因为你是复制了一个新的苹果给的test
    而引用数据类型 传入的参数是引用 相当于你复制了一把房间的钥匙给了test test通过钥匙进入房间修改了 ,会影响你房间

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月31日
  • 已采纳回答 5月23日
  • 创建了问题 5月22日

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条