2016-09-30 61 views
-5

如何將堆區數據移動到字符串常量池?如何將堆區數據移動到字符串常量池?

 String s3 = new String("Test"); 
     final String s4 = s3.intern(); 
     System.out.println(s3 == s4);//fasle(i need true) 

我不希望創建新的對象,因此剛剛從堆削減對象並將其粘貼在字符串常量池的

+0

'System.out.println(s3.equals(s4))'。換句話說,不要比較參考,比較數據。我沒有發現需要比較'String'引用(除了'null'),如果你認爲你需要它,你可能設計錯了你的程序。爲了回答你的問題,'s3.intern()'創建一個新的對象,因此引用將不會相等。 – ajb

+0

我不想創建新對象,所以只需從堆中剪下對象並將其粘貼到字符串常量池中即可。 –

+0

幾乎Java中的所有東西都是一個對象。 Java不是微軟的Word,你不能在不創建新對象的情況下「剪切和粘貼」數據。你真的需要回頭研究Java的基礎知識。 – ajb

回答

0

你是不是堆的數據移動到字符串常量池,當你調用intern,你是隻需在常量池中添加另一個新字符串(如果它不存在於常量池中(因爲​​已添加到常量池-1行中)。

您可能要更改您的代碼:

public static void main(String[] args) { 
    String s3 = new String("Test"); 
    s3 = s3.intern(); 
    String s4 = "Test"; 
    System.out.println(s3 == s4);//fasle(i need true) 
} 

在上面的代碼你指定參考S3的實習值再次S3。接下來,您將在S4中從String常量池中獲取相同的對象。

+0

我想將堆區數據移動(剪切)到字符串常量池?但是當我使用實習生時只是複製對象.. –

+0

我不想創建新對象,所以只需從堆中剪下對象並將其粘貼到字符串常量池中 –

+0

@ShivarajMc - 好吧,一旦GC運行,堆中的字符串'Test'就會符合GC的條件。因此,你間接地做了一些剪切粘貼相同的對象有一些延遲 – TheLostMind

相關問題