今天遇到一个面试,顺便学习加深印象,分享给大家……
System.identityHashCode方法是java根据对象在内存中的地址算出来的一个数值,不同的地址算出来的结果是不一样的。
1、一个接口中有一个变量,2个类实现这个接口,实现类中的接口中的这个变量地址一样吗?
public interface MyInterFace {
String str = "1111";
}
public class One implements MyInterFace {
}
public class Two implements MyInterFace {
}
public class Main {
public static void main(String[] args) {
One one = new One();
Two two = new Two();
System.out.println(System.identityHashCode(one.str));
System.out.println(System.identityHashCode(two.str));
}
}
结论:一样的且不能修改 因为接口中的变量默认是final,public 修饰
-----------1----------
356573597
356573597
-----------------------
2、一个父类有一个变量,2个子类继承父类,那么这个父类中的变量地址一样?
public class MyClass {
String obj = "22223";
}
public class One extends MyClass{
}
public class Two extends MyClass{
}
public class Main {
public static void main(String[] args) {
One one = new One();
Two two = new Two();
System.out.println("-----------2----------");
System.out.println(System.identityHashCode(one.obj));
System.out.println(System.identityHashCode(two.obj));
System.out.println("---------------------");
}
}
结论:因为是public的 是一样的额,且可以修改
-----------2----------
1735600054
1735600054
---------------------
3、一个父类中有构造方法、静态方法;一个子类有构造方法,静态方法,执行顺序是什么?
//父类
public class Three {
public Three() {
System.out.println("父类构造");
}
public static void go(){
System.out.println("父类静态方法");
}
}
public class ThreeSun extends Three {
public ThreeSun() {
System.out.println("子类构造方法");
}
public static void go() {
System.out.println("子类静态方法");
}
}
结论:先执行父类的,再执行子类的,父类的go()被子类屏蔽了
父类构造
子类构造方法
子类静态方法
4、直接new2个变量 和让2个变量等于一个常量 ,变量地址一样吗?
String a = new String("1");
String b = new String("1");
String c = "1";
String d = "1";
System.out.println("-----------3----------");
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(b));
System.out.println(System.identityHashCode(c));
System.out.println(System.identityHashCode(d));
结论:
-----------4----------
356573597
1735600054
21685669
21685669
网友评论