Java中参数传递的本质还是值传递(静态方法中将对象置为空 为什么打印时对象还存在?)

1 静态工具方法

public class RedisLockUtils {
    public static void getLockFail(Order order){
        order = null;
    }
}

2 main方法调用静态方法

public static void main(String[] args) {
  Order order = new Order();
  order.setPayOrderNo("222");
  RedisLockUtils.getLockFail(order);
  System.out.println(order);
}

3 打印结果

Order{orderNo='null', payOrderNo='222'}

为什么打印结果对象有数据而不是null呢?

结论

当order = null;时其实是将内部的order指向一个新的地址(空对象地址)
但是不会对原来的对象产生影响.
public static void getLockFail(Order order){
order.setOrderNo("333");
// 指向了新的地址值 null
order = null;
System.out.println(order);
}

打印结果:
null
Order{orderNo='333', payOrderNo='222'}

参考来源:

https://www.cnblogs.com/sum-41/p/10799555.html

  

  

 
通过知识/经验的分享,节省开发者的时间.
原文地址:https://www.cnblogs.com/ysloong/p/14298839.html