簡體   English   中英

Java對象創建和引用

[英]Java object creation and referencing

我在考慮Java和內存管理,有一些我不確定的東西。

假設我們使用包裝類Integer將int類型表示為對象

我們創建兩個對象

整數x = 1; 整數y = 1:

我的問題是,Java是否在兩個不同的內存位置創建兩個相同的對象,並使用x和y引用它們。 或者它只創建一個對象並使用兩個引用指向那個對象?

另外,有沒有辦法找出對象在Java中存儲在內存中的位置?

JVM為小型Integer對象實現緩存 並且您不需要獲取Java對象的地址。

關於整數-它具有自己的緩存,不會為-128..127范圍創建任何新實例。

因此,在您的情況下,它將引用相同的對象。

Integer.class

     public static Integer valueOf(int i) {
         final int offset = 128;
         if (i >= -128 && i <= 127) { // must cache
             return IntegerCache.cache[i + offset];
         }
         return new Integer(i);
     }

編譯器通常會尋找這樣的優化並應用Copy on Write http://en.wikipedia.org/wiki/Copy-on-write

您可以檢查字符串,因為定義了兩個字符串,例如

String x = "test";
String y = "test":

是這樣的

if (x == y) 

其他任何時間都需要.equals

例如

public class test
{
  public static void main(String[] args){
    String x = "test";
    String y = "test";
    if (x == y){
      System.out.print("Same object");
    }
  }
}

然后跑

$ java test 
Same object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM