java基礎部分判斷題
// Object obj =null; System.out.println(String.valueOf(obj));//result:"null"
// System.out.println(String.valueOf(null));//error
// System.out.println("123"==String.valueOf("123")); //true
// System.out.println("123"==new String("123"));//flase
// System.out.println(new String("123").equals(String.valueOf("123")));//true
// System.out.println(new String("123")==String.valueOf("123")); //flase
// List<String> list=new ArrayList<String>(0);//lsit是一個可變長的集合,0只是默認容量大小,添加前判斷當前容量,不足則擴容;擴容方式:newCapacity = oldCapacity + (oldCapacity >> 1)
// list.add("123");
// System.out.println(list.get(0));
// List<Object> list = Collections.emptyList();list.add("123");//error 有時候需要返回一個空集合,直接返回null或者new一個耗性能,要做判空等判斷.使用這個不用判空,不會報空指針異常;該list不能做add操作 原因是,emptylist沒有add方法,使用的是父類abstractList的add方法,該方法報UnsupportedOperationException();不支持該操作
當一個集合(Collection/set/List/map等)被作爲參數傳遞給一個函數時,如何保證函數不能修改它?
在作爲參數傳遞之前,我們可以使用Collections.unmodifiableCollection(Collection c)方法創建一個只讀集合,這將確保改變集合的任何操作都會拋出UnsupportedOperationException。
集合部分推薦觀看博客鏈接,幾乎全解;
https://blog.csdn.net/u010775025/article/details/79315361
字符串解析問題
private final char value[]; //The value is used for character storage
private int hash; //Cache the hash code for the string
其中第一個就是實際存儲字符串的數組,所有字符串最終的存儲形式都是字符數組。從上圖中可以很清晰的看出,實際的字符數組還是存儲在堆中,常量池中存儲的是String對象。
當執行String str = “Hello”,只是將常量池中"Hello"對象的地址賦給了str。