值传递:

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {

String str="4234";
System.out.println(str);
change(str);
System.out.println(str);
}

static void change(String str){
str="fdsf";
}

输出结果:4234 4234

地址传递:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

package com;


public class AddressTest {
private Integer age;

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

@Override
public String toString() {
return "AddressTest{" +
"age=" + age +
'}';
}

public static void main(String[] args) {
AddressTest addressTest=new AddressTest();
addressTest.setAge(10);
System.out.println(addressTest);

change(addressTest);
System.out.println(addressTest);
}

static void change(AddressTest addressTest){
addressTest.setAge(22);
}

}

输出结果: AddressTest{age=10} AddressTest{age=22}

总结:

8种基本引用类型

四种整数类型(byte、short、int、long)

两种浮点数类型(float、double)

一种字符类型(char)

一种布尔类型(boolean)

以及如String, final类型的数据类型

在方法调用时,属于值传递,在方法中改变了值之后,原始值不会改变。

除了以上之外的数据类型,如自定义的对象,Map,List之类的引用,都是地址引用。