1. 对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没用改变。

  2. 对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。

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
37
38
39
40
41
42
43
44
45
46
47
public class ReferenceValue {

public static void main(String[] args) {
StringBuffer a = new StringBuffer("I am kitty");
System.out.println(a);
changeBufferValue(a);
System.out.println(a);
reRefer(a);
System.out.println(a);
Cat kitty = new Cat();
System.out.println(kitty);
changeReference(kitty);
System.out.println(kitty);
reRefer(kitty);
System.out.println(kitty);


}

public static void changeBufferValue(StringBuffer sb) {
sb.append(", Hello");
}

public static void reRefer(StringBuffer sb) {
sb = new StringBuffer("6666");
}

public static void changeReference(Cat cat) {
cat.color = Color.PINK;
}

public static void reRefer(Cat cat) {
cat = new Cat();
cat.name = "Tom";
cat.color = Color.BLACK;
}

static class Cat {
Color color = Color.YELLOW;
String name = "Kitty";

@Override
public String toString() {
return this.name + " " + this.color;
}
}
}

输出

1
2
3
4
5
6
I am kitty
I am kitty, Hello
I am kitty, Hello
Kitty java.awt.Color[r=255,g=255,b=0]
Kitty java.awt.Color[r=255,g=175,b=175]
Kitty java.awt.Color[r=255,g=175,b=175]