0
点赞
收藏
分享

微信扫一扫

java的传参方式

颜娘娘的碎碎念 2022-04-08 阅读 96
java

java的传参方式

传参方式

值传递

方法接收的是实参值的拷贝,会创建副本。
在这里插入图片描述

引用传递

方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
在这里插入图片描述

尝试证明JAVA仅存在值传递这一种传参方式

基本数据类型

	public static void main(String[] args) {
        int a = 129;
        int b = 130;
        intSwap(a, b);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }

	public static void intSwap(int value1, int value2) {
        int temp = value1;
        value1 = value2;
        value2 = temp;
    }
	
	// 运行结果:a = 129;b = 130;

基本数据类型的引用类型

	public static void main(String[] args) {
        int a = 129;
        int b = 130;
        intSwap(a, b);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }

	public static void integerSwap(Integer value1, Integer value2) {
        Integer temp = value1;
        value1 = value2;
        value2 = temp;
    }
	
	// 运行结果:a = 129;b = 130;

对象类型(与数组类型类似)

	public static void main(String[] args) {
        TestClass a = new TestClass("a", 129);
        TestClass b = new TestClass("b", 130);
        objSwap(a, b);
        System.out.println(a);
        System.out.println(b);
    }

	private static void objSwap(TestClass value1, TestClass value2) {
        TestClass temp = value1;
        value1 = value2;
        value2 = temp;
    
        System.out.println(value1);
        System.out.println(value2);
        value2.value = 0;
    }
    
    static class TestClass {
        public String key;
        public Integer value;
        
        public TestClass(String key, Integer value) {
            this.key = key;
            this.value = value;
        }
        
        @Override
        public String toString() {
            return key + " = " + value;
        }
    }

	// 运行结果:a = 0;b = 130;

结论

在上述三个示例中,我们在方法中对两个实参进行互相替换,得到的却是没有替换的结果,说明形参的修改并没有影响到实参,所以java的传参方式的是值传递。

类型时对象类型传参方式是值传递。
为什么会影响到实参?这是因为这里的值,指的是对象本身,而我在方法中的修改是修改了值本身,而不是改变了实参。(可以通过将形参指向一个新的对象后,对形参进行修改,观察实参的变化,加以证明)

在这里插入图片描述

举报

相关推荐

0 条评论