- 自动装箱、拆箱
1 public class IntegerTest { 2 3 @Test 4 public void constPool(){ 5 // 自动装箱时,调用valueOf方法,默认会将-128 至 127 放常量池 6 Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; 7 8 System.out.println(f1 == f2); // true 常量池中 9 System.out.println(f3 == f4); // false 非常量池中,不同对象引用 10 } 11 12 @Test 13 public void autoboxing(){ 14 Integer a = new Integer(3); 15 Integer b = 3; 16 int c = 3; 17 18 System.out.println(a == b); // false 不同引用 19 System.out.println(a == c); // true a自动拆箱成int类型 20 } 21 }
- 栈(stack)、堆(heap)、静态区(static area)
通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、”hello”和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。
String str = new String("hello");
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。
- 构造方法
子类默认继承父类的无参数的构造方法。带参数的构造方法不能继承,也不能重写,因为类名都不一样了。