一、类
最简单的类:class A{ }
类是定义、规范。
二、对象
定义一个对象:A obj = new A();
对象是实例,是类的实现。
这个对象obj可以看做C/C++中的指针,在Java中成为Reference。
对象中的类成员变量是有默认值的,而函数中的局部变量是没有默认值的。
三、例子
例子1
class Number{
int number = 5;
}
public class ReferenceTest{
public static void main(String[] args) {
int num1 = 5;
int num2 = num1;
System.out.println("num1 = " + num1 + ", num2 = " + num2); //输出num1 = 5, num2 = 5
num2 = 10;
System.out.println("num1 = " + num1 + ", num2 = " + num2); //输出num1 = 5, num2 = 10
Number obj1 = new Number();
Number obj2 = new Number();
System.out.println("obj1 = " + obj1.number + ", obj2 = " + obj2.number); //输出obj1 = 5, obj2 = 5
obj2 = obj1;
obj2.number = 10;
System.out.println("obj1 = " + obj1.number + ", obj2 = " + obj2.number); //输出obj1 = 10, obj2 = 10
}
}
前半部分的值都是直接赋给变量num1和num2,改变一个不会影响另一个。
后半部分的obj1和obj2就好比是两个指针,obj2 = obj1 使得两个指针指向同一个数,此后无论赋什么值,obj1=obj2恒成立。
例子2
class Number{
int number = 5;
}
public class SwapExample{
public static void main(String[] args) {
int a = 5, b = 10;
swap(a,b);
System.out.println("a = " + a + ",b = " +b); //输出a = 5,b = 10
Number obj1 = new Number();
Number obj2 = new Number();
obj2.number = 10;
swap(obj1,obj2);
System.out.println("obj1 = " + obj1.number + ",obj2 = " +obj2.number); //输出obj1 = 10,obj2 = 5
}
public static void swap(int m, int n) {
int temp = m;
m = n;
n = temp;
}
public static void swap(Number obj3, Number obj4) {
int temp = obj3.number;
obj3.number = obj4.number;
obj4.number = temp;
}
}
前半部分swap中的m和n会分别赋给5和10,即该代码等同于swap(5,10),其中m和n的值交换,并不会影响a和b的值的结果。
后半部分swap中obj3和obj1两个指针会指向同一块内存,obj4和obj2两个指针会指向同一块内存,所以obj3和obj4的值交换会影响obj1和obj2的值的结果。