java到底是值传递还是引用传递

Python015

java到底是值传递还是引用传递,第1张

java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。

如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 

如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

结果是(p1[0,0], p2[5,5])就对了, 下图是执行流程以及内存变化

记住: 当对象的引用被执行赋值操作(=)后, 讲不在指向原来的对象(新的对象不是原来的对象)

// modify方法做如下修改就知道为什么是那样的结果了:

    private static void modify(Point p1,Point p2){

        System.out.println(p2) // 注意观察hashcode值, 不要重写toString()方法

        Point p = p1

        p1 = p2

        p2 = p

        p1.setLocation(5, 5)

        p2 = new Point(5, 5)

        System.out.println(p2) // 这里p2与之前的p2的hashcode值已经不是同一份

    }

    

// 修改main方法如下

    public static void main(String[] args)

    {

        Point p1 = new Point(0,0)

        Point p2 = new Point(0,0)

        System.out.println(p2)

        modify(p1, p2)

        System.out.println(p2)    // modify执行完成后, p2的指向并未改变

        System.out.println(p1.getX()+","+p1.getY()+","+p2.getX()+","+p2.getY())

    }

    

    /**

    * 可以使用断点调试观察modify方法中p2的指向变化

    * Eclipse中引用被赋予新的值时, 调试界面中[变量列表]的变化为 黄色高亮显示

    */

希望对你有帮助!