您的位置:首页 > 编程语言 > Java开发

【Java核心技术——Java总是采用值调用】

2014-02-24 20:53 232 查看
专业术语:
调用:方法参数的传递方式。
值调用:方法接收的是调用者提供的值。
引用调用:方法接收的是调用者提供的变量地址。

Java总是采用值调用:

基本数据类型:

public class Main {

public static void reset(int value) {
value = 0;
}

public static void main(String[] args) {
int value = 100;
System.out.println(value);

reset(value);
System.out.println(value);
}
}


reset方法没有改变value的值,属于值调用。

对象引用:

class Person {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}

public class Main {

public static void changeName(Person person, String name) {
person.setName(name);
}

public static void main(String[] args) {
Person jason = new Person();
jason.setName("Jason");
System.out.println(jason);

changeName(jason, "LiZhixiang");
System.out.println(jason);
}
}


第一次输出:Jason

第二次输出:LiZhixiang

这并不能说明对象引用进行的是引用调用。

对象引用进行的是值调用,方法得到的是对象引用的拷贝,此时对象引用与它的所有拷贝引用同一个对象。

class Person {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}

public class Main {

public static void swap(Person p1, Person p2) {
Person tmp = p1;
p1 = p2;
p2 = tmp;
}

public static void main(String[] args) {

Person p1 = new Person();
p1.setName("Alice");

Person p2 = new Person();
p2.setName("Bob");

System.out.println(p1 + " " + p2);

swap(p1, p2);

System.out.println(p1 + " " + p2);
}
}
swap方法并没有任何作用。

因此,对象引用进行的也是值调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息