一、引用类型与原始数据类型
// 原始数据类型
int value = 100;
System.out.println(value);
// 引用类型
class MyClass {
private int num;
public int getNum() {
return num;
}
}
MyClass obj = null;
obj = new MyClass();
System.out.println(obj.getNum());
二、对象判等
// “==”比较引用类型
class Foo {
int value = 100;
}
public class TestEquals1 {
public static void main(String[] args) {
Foo obj1 = new Foo();
Foo obj2 = new Foo();
System.out.println(obj1 == obj2);
}
}
// 重写equals()比较内容
class MyTestClass {
public int Value;
public MyTestClass(int initValue) {
Value = initValue;
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof MyTestClass)) {
return false;
}
return ((MyTestClass) obj).Value == this.Value;
}
}
public class TestEquals2 {
public static void main(String[] args) {
MyTestClass obj1 = new MyTestClass(100);
MyTestClass obj2 = new MyTestClass(100);
System.out.println(obj1.equals(obj2));
}
}
三、构造方法
// 自定义构造后无默认无参构造(编译失败示例)
class Foo1 {
int value;
public Foo1(int initValue) {
value = initValue;
}
}
public class TestConstructor1 {
public static void main(String[] args) {
// Foo1 obj = new Foo1(); // 编译失败
}
}
// 手动添加无参构造(正常运行)
class Foo2 {
int value;
public Foo2() {}
public Foo2(int initValue) {
value = initValue;
}
}
public class TestConstructor2 {
public static void main(String[] args) {
Foo2 obj1 = new Foo2();
Foo2 obj2 = new Foo2(100);
}
}
四、字段初始化顺序
class InitializeBlockClass {
int field = 200;
{
field = 100;
}
public InitializeBlockClass() {}
public InitializeBlockClass(int value) {
this.field = value;
}
}
public class TestInitOrder {
public static void main(String[] args) {
InitializeBlockClass obj1 = new InitializeBlockClass();
System.out.println(obj1.field);
InitializeBlockClass obj2 = new InitializeBlockClass(300);
System.out.println(obj2.field);
}
}