反射就是把java中各個成分(比如方法,屬性,package,數組之類的有統一名字,又能抽象出來的東西)映射成java中相應的各種類
字節碼:當加載類時,先把類的二進制字節碼加載到內存中,再用字節碼複製一個又一個對象
得到字節碼方式:如果內存中已經存在該字節碼,則返回該字節碼,如不存在,則先加載,再返回加載的字節碼
三種方式獲得字節碼:
1. 對象.getClass();
2. 類.Class
3. Class.forName("");
如:
String str= “”;
Class cs1= str.getClass();
Class cs2= String.Class();
Class cs3= Class.forName("java.lang.String");
public class ReflectTest {
public static void main(String args[]) {
String str1="";
Class cls1 = str1.getClass();
Class cls2 = String.class;
try {
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1==cls3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(cls1==cls2);
System.out.println(cls1.isPrimitive());
//String不是基本類型,isPrimitive判斷是否爲基本類型
}
}
也就是說,String類型的實例對象他們因爲字節碼相同
所以他們相等