class TA { public String s = "A"; public String getS() { return s; } } class TB extends TA { public String s = "B"; public String getS() { return s; } } public class TestInheritance { public static void main(String[] args) { TA a = new TA(); TB b = new TB(); a.s = "AA"; b.s = "BB"; a = b; // TA a2 = b; // System.out.println(a == a2); // System.out.println(a2.s); // System.out.println(a2.getS()); // java的内存模型:成员变量是放在栈区? // 父类引用指向子类对象,方法是可以被覆盖的,但是成员变量是无法覆盖的? // // (2014.1.18 add)说明,加载TB类时加载了TA类,所以b这个引用地址(堆内存开始的地址)指向的空间 // 大小为TA.class占用的内存大小和TB.class占用的内存空间,那么就可以解释 // System.out.println(a.s);输出的结果为什么是'A'了吗? // 方法被重写了,但是成员变量不能被重写,所以还是两份 System.out.println(a.s); System.out.println(b.s); System.out.println(a.getS()); System.out.println(b.getS()); } }
public class TestComparisonOperator { public static void main(String[] args) { Long a1 = 19L; Long a2 = 19L; Long b1 = 1900L; Long b2 = 1900L; //小于128的数,可能会经常用到,所以会转换为基本变量而不是对象引用 System.out.println(a1 == a2); System.out.println(b1 == b2); } }