閱讀原文:
面試別再問我String了?mp.weixin.qq.com因為我已爛熟於心,靈活運用了,別考了。哈哈,希望你能讀後思考一下這樣對面試官說。
String 簡介
String定義:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {}
為什麼設計為不可變類呢?
String設計為不可變類主要考慮到:效率和安全。
測試掌握程度
為了不浪費你的時間,請看下面的題目,若你一目了然,可以跳過本文了。
public class Test {
public static void main(String[] args) {
String str1 = "HelloFlyapi";
String str2 = "HelloFlyapi";
String str3 = new String("HelloFlyapi");
String str4 = "Hello";
String str5 = "Flyapi";
String str6 = "Hello" + "Flyapi";
String str7 = str4 + str5;
System.out.println("str1 == str2 result: " + (str1 == str2));
System.out.println("str1 == str3 result: " + (str1 == str3));
System.out.println("str1 == str6 result: " + (str1 == str6));
System.out.println("str1 == str7 result: " + (str1 == str7));
System.out.println("str1 == str7.intern() result: " + (str1 == str7.intern()));
System.out.println("str3 == str3.intern() result: " + (str3 == str3.intern()));
}
}
String 的創建方式
從上面的題中你會知道,String的創建方式有兩種:
直接賦值
- 此方式在方法區中字元串常量池中創建對象1、String str = "flyapi";
構造器
- 此方式在堆內存創建對象1、String str = new String();
分析
要理解String,那麼要了解JVM內存中的棧(stack)、堆(heap)和方法區。簡要圖如下: