String字符串 比較 解析 附實際公司面試相關題

字符串理解(java核心技術 卷一 48頁 有感)

概念: Java字符串就是Unicode字符序列,java中沒有內置的字符串類型,而是在類庫中提供了一個預定義類,很自然的叫做String.每個用雙引號括起來的字符串都是String類的一個實例. 如: String e=""" ; String greeting=“hello”;
字符串是不可變的: 在java中 String類是不可變字符串,比如,1就是1 2就是2 “hello"就是"hello” “hell"就是"hell”,而不能單獨修改其中任何一個單一字符.這些字符串字面量存在一個公共存儲池裏,便於共享,string字符串變量可以指向同一個字符串字面量. Java設計者認爲共享帶來的高效率遠勝過提取拼接的低效率.對於特定必須大量進行字符串拼接的情況 java提供了stringbuilder類.
與c相比 替換操作: java字符串類似於char*指針,但java字符串替換操作是另開闢一個空間,若原來指向的字符串常量沒有變量引用了則會被java自動回收機制回收.
比較字符串是否相等: Java中兩種比較方式"= =" 和 equals()方法,推薦使用的是equals()方法(比較的是內容). "= =“方式只能確定兩個字符串是否放置在同一個位置,(完全有可能內容相同的多個字符串拷貝在不同位置)即是否指向的是同一個對象,實際上只有字符串常量是共享的,而+或substring操作產生的結果是不共享的所以: String greeting=“hello” if(greeting.substring(0,3)==“hell”)// probably false
空串與null串: 空串”"指長度爲0內容爲空的字符串,而null串指當前沒有對象與它關聯.

字符串深度解析問題(不全待完善)

在這裏插入圖片描述
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。

推薦文章:
https://www.cnblogs.com/fairly/p/6091456.html

附帶真實面試題string+集合題

    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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章