JAVA中对象采用的不是引用调用

程序设计语言(c++,Pascal)一般提供两种参数传递方式.
分别是: 值调用引用调用

在java中有些人可能会认为对象采用的是引用调用.
实际上java的对象引用按值传递

例子:

public class ParamTest {
    public static void main(String[] args){
        System.out.println("Testing tripleValue");
        //测试变量
        double percent = 10;
        System.out.println("原本的值为 percent = "+percent);
        tripleValue(percent);
        System.out.println("调用函数之后的值为 percent = "+percent);

        System.out.println("\nTesting tripleSalary: ");
        //对象测试
        EmployeeThree harry = new EmployeeThree("Harry", 50000);
        System.out.println("原本对象的值为 percent = "+harry.getSalary());
        tripleValue(harry);
        System.out.println("调用函数之后的对象的值为 percent = "+harry.getSalary());

        System.out.println("\nTesting swap:");
        //两个对象进行互换
        EmployeeThree a = new EmployeeThree("Alice", 70000);
        EmployeeThree b = new EmployeeThree("Bob", 60000);
        System.out.println("原本对象a的名字 a = "+a.getName());
        System.out.println("原本对象b的名字 b = "+b.getName());
        swap(a,b);
        System.out.println("调用函数之后的对象a的名字 a = "+a.getName());
        System.out.println("调用函数之后的对象b的名字 a = "+b.getName());
    }

    public static void tripleValue(double x){
        x = 3*x;
        System.out.println("方法里面的输出 Salary : "+x);
    }

    public static void tripleValue(EmployeeThree x){
        x.raiseSalary(200);
        System.out.println("方法里面的输出 Salary : "+x.getSalary());
    }

    public static void swap(EmployeeThree x, EmployeeThree y){
        EmployeeThree temp = x;
        x = y;
        y = temp;
        System.out.println("方法里面的输出 x = "+x.getName());
        System.out.println("方法里面的输出 y = "+y.getName());
    }
}

class EmployeeThree {   //员工类第三
    private String name;
    private double salary;

    public EmployeeThree(String n, double s) {
        name = n;
        salary = s;
    }

    public String getName() {   //获取名字
        return name;
    }

    public double getSalary() { //获取薪水
        return salary;
    }

    public void raiseSalary(double byPercent){
        double raise = salary * byPercent/100;
        salary += raise;
    }

}

运行结果:
在这里插入图片描述
测试变量时:
变量原本10, 函数内部 乘3 之后内部输出30,函数调用之后,重新输出还是为10
.
.
.
测试对象时:
通过给对象成员属性赋值,然后调用方法乘2%
原本50000,函数的内部变成150000,在函数调用之后,输出的是150000
.
.
.
测试两个对象的成员属性互换时:

原本a = Alice, b = Bob,通过调用函数的静态swap()方法,变成了a = Bob, b =Alice
但是在调用之后,重新输出时还是a = Alice, b = Bob.

所有我们能得出结论:java对象采用的不是引用调用,实际上,对象引用是按值传递的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值