美文网首页
Java对对象采用的是值调用还是引用调用?

Java对对象采用的是值调用还是引用调用?

作者: 笨笨牛皮糖 | 来源:发表于2020-05-14 12:25 被阅读0次

准备一个雇员类:

public class Employee {
    private String name;
    private double salary;

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

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }
}

首先,编写一个交换两个雇员对象的方法:

public static void swap(Employee x, Employee y) { // does't work
    Employee temp = x;
    x = y;
    y = temp;
}

如果Java对对象采用的是按引用调用,那么swap方法就应该能够实现交换数据的效果:

Employee a = new Employee("Alice", 400);
Employee b = new Employee("Bob", 300);
swap(a,b);
// does a now refer to Bob, b to Alice?

但是,方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。

// x refers to Alice, y to Bob
Employee temp = x;
x = y;
y = temp;
// now x refers to Bob, y to Alice

可以输出看一下:

System.out.println("a.name=" + a.getName() + ",a.salary=" + a.getSalary());
System.out.println("b.name=" + b.getName() + ",b.salary=" + b.getSalary());

>>> a.name=Alice,a.salary=400.0
>>> b.name=Bob,b.salary=300.0

最终,白费力气。在方法结束时,参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用之前所引用的对象。

这个过程说明:Java程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的。

引用自《Java核心技术 卷I》

相关文章

  • Java对对象采用的是值调用还是引用调用?

    准备一个雇员类: 首先,编写一个交换两个雇员对象的方法: 如果Java对对象采用的是按引用调用,那么swap方法就...

  • 踩坑集

    1.==与equal:博客2.1 对象?对象引用?博客 2 java方法调用(call by),值调用?引用调用?...

  • 形参与实参的区别

    形参与实参详解 总结:    1.java的基本数据类型是传值调用,对象引用类型是传引用。    2.当传值调用时...

  • JS中的引用类型

    JS 引用类型变量的值是一个指针,指向堆内存中的实际对象。 基本类型是传值调用 引用类型传共享调用 传值调用(Pa...

  • java中的参数传递(只有值传递没有引用传递)

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • 解决java中的参数传递问题

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • Java 参数的传递

    Java 的参数是值传递,不是引用传递 Java 中只有值传递,方法按值调用(call by value)。也就是...

  • Java核心技术(卷I) 5、Java值传递

    1、按值调用和按引用调用 按值调用:方法接收的是调用者提供的值 按引用调用:方法接收调用者提供的变量地址 方法可以...

  • Flutter基础知识

    0、Dart是值传递还是引用传递? Dart是值传递。每次调用函数,传递过去的都是对象的内存地址,不是对象的复制。...

  • Flutter高级面试题&答案

    1、Dart是值传递还是引用传递? dart是值传递。每次调用函数,传递过去的都是对象的内存地址,而不是这个对象的...

网友评论

      本文标题:Java对对象采用的是值调用还是引用调用?

      本文链接:https://www.haomeiwen.com/subject/atiznhtx.html