java中值传递

在java中是按照值传递的,准确的说,值传递就是传递堆中的地址。
通过三个例子来了解一下值传递
例子一:

public class Apple {
    public double height;
    private String color;

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}
public class Test {
    public static void main(String[] args){
        double a = 1.0;
        double b = 2.0;
        swap1(a,b);
        System.out.println(a+" "+b);
    }
    public static void swap1(double x, double y){
        double t = x;
        x = y;
        y = t;
    }
}

运行结果:
在这里插入图片描述
分析:从内存指向的角度进行分析
double属于基本数据类型,基本数据类型其数值存在于栈。
在这里插入图片描述
例子二:

public class Test {
    public static void main(String[] args){
        
        Apple x1 = new Apple();
        Apple x2 = new Apple();
        x1.setHeight(1.0);
        x2.setHeight(2.0);
        swap2(x1,x2);
        System.out.println(x1.height+" "+x2.height);
    }
    public static void swap2(Apple x, Apple y){
        Apple t = x;
        x = y;
        y = t;
    }
}

运行结果:
在这里插入图片描述
分析:从内存指向的角度进行分析
对象属于引用数据类型,在栈中存放对象的地址,在堆中存放对象的内容。
swap2方法入栈后开辟了一个新的空间,只交唤了x和y的内存地址,t的内存地址为999,仅是在堆中指向了地址为999的位置,什么都没做。
在这里插入图片描述
swap2方法出栈后,对main方法中的对象没有任何影响。
在这里插入图片描述
例子三:

public class Test {
    public static void main(String[] args){
        
        Apple x1 = new Apple();
        Apple x2 = new Apple();
        x1.setHeight(1.0);
        x2.setHeight(2.0);
        swap3(x1,x2);
        System.out.println(x1.height+" "+x2.height);
    }
    public static void swap3(Apple x, Apple y){
        double t = x.getHeight();
        x.setHeight(y.getHeight());
        y.setHeight(t);
    }
}

运行结果:
在这里插入图片描述
分析:从内存指向的角度进行分析
swap3方法入栈后改变了堆中的height数值。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值