2013-08-01 99 views
0

AFAIK當Java自動將基元類型轉換爲包裝類對象而不是稱爲自動裝箱時,因爲原語被裝箱到包裝類中。是否將int轉換爲一個計爲Autoboxing的字符串?

所以是

int test = 3; 
String str = String.valueOf(test); 

算作自動裝箱?

請問的理由?

我最近遇到了this的問題。我認爲這是java 5中引入的自動裝箱的原因(不存在於Java 4中)。

回答

5

編號自動裝箱只適用於原語 - >包裝。由於沒有String原語(或包裝),String與自動裝箱無關。

1

Autoboxes只有當「阻抗不匹配」引用類型和原始類型

No. 

如果我們看一下valueOf方法的源代碼int PARAM

public static String More ...valueOf(int i) { 
     return Integer.toString(i, 10); 
} 

Integer wrapper調用toString之間

在Integer wrapper中創建的新字符串toString()

public static String More ...toString(int i, int radix) { 

     if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) 
      radix = 10; 

     /* Use the faster version */ 
     if (radix == 10) { 
      return toString(i); 
     } 

     char buf[] = new char[33]; 
     boolean negative = (i < 0); 
     int charPos = 32; 

     if (!negative) { 
      i = -i; 
     } 

     while (i <= -radix) { 
      buf[charPos--] = digits[-(i % radix)]; 
      i = i/radix; 
     } 
     buf[charPos] = digits[-i]; 
     if (negative) { 
      buf[--charPos] = '-'; 
     } 

     return new String(buf, charPos, (33 - charPos)); 
    } 
1

Autoboxing是原語自動轉換爲相應的包裝。雖然int是原語,String而不是包裝。

0

不,這不會被視爲自動拳擊。自動拳擊是在原始和那裏包裝類之間。 請參考:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

從文檔:

轉換一個原始值(一個int,例如)插入到相應的包裝類(整數)的對象被稱爲自動裝箱。

  • 作爲參數傳遞給需要相應的包裝器類的對象的方法:當一個原始值是 Java編譯器適用自動裝箱。
  • 分配給相應包裝類的變量。
0

不,這不是自動裝箱。

我認爲是Java 5中引入的自動裝箱的原因(Java 4中不存在)。

您的邏輯有問題。

您鏈接到的問題是關於在Java 1.4.x和Java 1.5之間更改String.valueOf(int)的行爲。 Java 1.5中也添加了自動裝箱功能。然而,推斷這兩件事是以任何方式連接是不合邏輯的。

另外,這不是String實習的例子。 String.valueOf(int)沒有在Java 1.5或Java 1.4.x中實習字符串。 (在Java 1.4.x的情況下,對於一些輸入,該方法確實返回了以前被實施的字符串,但那只是因爲它們是字符串文字。)