描述java基础容易忽略的问题,如下面几个知识点:
int a = 1;1会存放在栈里
String s1 = "thanks";thanks会存放在data segment里
String s2 = new String("thanks");thanks会存放在data segment里
String a ="th";String b = "anks";String c =a+b;c会存放在data segment里
字符串全部存放在data segment里
常量池全部在栈里。
如果你不new的话,比如你写String s = "thanks";这时s分配在栈里,s直接指向字符池里的"thanks";但如果你这样写,String s; s = new String("thanks");这时s指向堆里的一块内存,这个内存里的地址指向字符池里的"thanks"; 变量会存放在堆栈中,句柄也会存放在堆栈中,对象会放在堆中,也就是内存池中。
static方法不存在override问题,当A类继承于B类时(假设A,B两类都有一个相同名字的静态方法text()),当B gao=new A(),然后对gao调用这个text()方法时候并不是向我们想象中的那样会进行后期绑定,此时调用的仍然是类B的静态方法而不在是类A的静态方法。因为有static的修饰就不属于接口的一部分,即不能被子类继承展示多态性。
。。。。