簡體   English   中英

包裝器類作為方法返回類型

[英]Wrapper class as method return type

有人可以解釋一下Java為什么/為什么允許這樣做嗎?

public class Test {
private int text;

public Integer getText() {
    return text;
}

實際上,我實際上是將包裝器類作為返回類型,而實際上卻在返回一個基元。

因為Java在版本5及更高版本中支持自動裝箱和取消裝箱 那是前者的一個例子,但后者同樣重要(和反向轉換)。 根據鏈接,

自動裝箱是Java編譯器在原始類型及其對應的對象包裝器類之間進行的自動轉換。

考慮以下代碼:(來自: http : //docs.oracle.com/javase/tutorial/java/data/autoboxing.html

List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(i);

盡管您將int值作為基本類型(而不是Integer對象)添加到li ,但是代碼仍會編譯。 由於li是一個Integer對象的列表,而不是一個int值的列表,因此您可能想知道Java編譯器為什么不發出編譯時錯誤。 編譯器不會產生錯誤,因為它會從i創建一個Integer對象並將該對象添加到li 因此,編譯器在運行時將先前的代碼轉換為以下代碼:

List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(Integer.valueOf(i));

將原始值(例如int)轉換為相應包裝類(Integer)的對象的過程稱為自動裝箱。 當原始值是:Java編譯器將應用自動裝箱:

  • 作為參數傳遞給需要相應包裝類對象的方法。
  • 分配給相應包裝器類的變量。

來自javadocs :由於Java 5 Autoboxing是Java編譯器在原始類型及其對應的對象包裝器類之間進行的自動轉換。 例如,將int轉換為Integer,將double轉換為Double,依此類推。

Java編譯器通常在以下情況下應用自動裝箱-

  • 作為參數傳遞給需要相應包裝類對象的方法。

  • 分配給相應包裝器類的變量。

為了提高性能,並不是Java中的所有對象都是對象。 還有一些原語,例如int,long,float,double等。

例如 java.lang.Integer類:-

  1. 它包裝一個int。
  2. 具有int類型的兩個靜態final字段:MIN_VALUE和MAX_VALUE。
  3. MIN_VALUE包含一個int的最小值(-2 ^ 31),MAX_VALUE包含一個int的最大值(2 ^ 31-1)。
  4. 它還具有兩個構造函數-public Integer(int值)和public Integer(字符串值)。
  5. Integer具有無參數的byteValue,doubleValue,floatValue,intValue,longValue和shortValue方法,這些方法將包裝后的值分別轉換為字節,double,float,int,long和short。
  6. 另外,toString方法將值轉換為String。
  7. 靜態方法將String解析為int(parseInt),然后將int轉換為String(toString)。

class AutoBox { public static void main(String args[]) { // autobox an int Integer a = 100; // auto-unbox int b = a; System.out.println(b + " " + a); // displays 100 100 } }

Java 5中已添加此功能。

文本會由編譯器自動轉換為Integer。 因此,從根本上講,它是一種語法糖,可以縮短您的代碼(否則,您將自己進行來回轉換)。 當然,它有其價格,如果這種情況發生很多(我的意思是很多事情,大循環,頻繁的調用等),它可能會成為性能問題,因此在使用它時,請記住它是在引擎蓋下發生的,並且你會沒事的。

Integer.valueOf(text)

被稱為幕后

該功能稱為自動裝箱

希望這可以幫助

暫無
暫無

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

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