首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 核心基礎六大必懂問題:引用、==/equals、String 不變性、final、初始化、instanceof

     編輯:Java 相關知識

問題一:String s = "Hello world!" 宣告了什麼?

宣告一個指向 String 物件的引用變數,名為 s,目前指向常量池中的 "Hello world!" 物件。並未宣告物件本身。String s2 = s; 只是複製引用,雙方指向同一物件,無新物件產生。

問題二:== vs equals()

  • == 比較變數值 (基本型別比值,引用型別比記憶體地址)。
  • new String("foo") 會在堆中建立兩個不同地址的物件,== 為 false。
  • equals() 比較物件內容。Object 默認實現為 ==,需子類覆寫 (如 String 比內容)。使用集合類 (HashMap/Set) 必須確認 equals 邏輯。

問題三:String 真的變了嗎?

不可變。s = s + " world!" 實際產生新物件 "Hello world!",s 改指向新物件,舊物件 "Hello" 留在記憶體待 GC。頻繁修改字串請用 StringBuffer/StringBuilder。常量池機制:字面量相同共用物件,new String() 強制新建。

問題四:final 修飾了什麼?

  • 基本型別:值不可變。
  • 引用型別:引用 (地址) 不可變,但指向的物件內容可變。final StringBuffer sb = new StringBuffer(); sb.append("x"); // OK,sb = new StringBuffer(); // 編譯錯誤。
  • 多執行緒下 final 無法保證物件狀態不變,錯誤用法:以為 final 就線程安全。

問題五:變數初始化規則

類型規則
類屬性 (Instance/Static)JVM 自動初始化 (0/false/null),Static 隨類載入一次,Instance 隨 new 每次。
區域變數必須顯式初始化,編譯器強制檢查 (含 try/if 分支覆蓋檢查)。
方法參數調用者傳值即初始化,無需額外賦值。

問題六:instanceof 是什麼?

二元運算符,測試左側物件是否為右側類/介面實例。String s = ""; s instanceof Object // true。濫用 instanceof 違反多態,應用方法重載/覆寫替代 (如 calculate(PhoneBill)/calculate(GasBill))。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved