簡體   English   中英

為什么我應該使用Integer.toString()而不是只打印Integer?

[英]Why should I use Integer.toString() instead of just printing the Integer?

我正在學習Java教程,它讓我做了類似的事情:

int k = 5;
System.out.println("The number is " + Integer.toString(k));

就像我跟隨的一項好運動一樣,但我不禁要問,為什么要使用這種方法呢? 看起來像很多額外的打字來獲得相同的功能:

int k = 5;
System.out.println("The number is " + k);

是否有充分的理由對非字符串數據類型使用toString()方法? 在我的具體示例中,是否有任何int值不能自動toString?

它是眾多“安全編程”實踐中的一種,您可以采用這些實踐來提高清晰度並防止您或代碼的未來維護者可能引入的細微錯誤。 請看以下示例:

private static void printMessage(int k) {
    System.out.println("number" + '=' + k);
}

輸出: number=5

現在假設您要先打印數字,最后打印文本。 我正在做的就是交換字符串連接中的第一個和最后一個項目:

private static void printMessage2(int k) {
    System.out.println(k + '=' + "number");
}

輸出: 66number

哎呀! =的int值被添加到k而不是連接。 一種解決方案是將=變為String 另一種解決方案是將int顯式轉換為String

private static void printMessage2Safe(int k) {
    System.out.println(Integer.toString(k) + '=' + "number");
}   

輸出: 5=number

“哦,但我永遠不會那樣做,”你說。 “任何人在他們的腦子會剛剛作出=其他字符串的一部分。” 但是,如果您要實現基本計算器應用程序的一部分,並且想要輸出表達式及其結果,該怎么辦? 如果你真的要小心,我想你會使用StringBuilder.append()來連接表達式的各個部分。 但如果沒有,那么我希望你不要編寫下面display方法的第一個實現。

public class Calculator {

    public static void main(String[] args) {
        display(2, '+', 3, 5);
        displaySafe(2, '+', 3, 5);
    }

    public static void display(int num1, char operator, int num2, int result) {
        System.out.println(num1 + operator + num2 + '=' + result);
    }

    public static void displaySafe(int num1, char operator, int num2, int result) {
        System.out.println(Integer.toString(num1) + operator + Integer.toString(num2) + "=" + result);
    }

}

輸出:

114
2+3=5

是否有充分的理由對非字符串數據類型使用toString()方法?

有些人認為它更清楚。 esp對於那些可能沒有意識到他們基本上做同樣事情的初學者。

注意:在Java 7更新9中,它不會首先創建String,因為append(int)看起來像這樣

// from AbstractStringBuilder 
public AbstractStringBuilder append(int i) {
    if (i == Integer.MIN_VALUE) {
        append("-2147483648");
        return this;
    }
    int appendedLength = (i < 0) ? Integer.stringSize(-i) + 1
                                 : Integer.stringSize(i);
    int spaceNeeded = count + appendedLength;
    ensureCapacityInternal(spaceNeeded);
    Integer.getChars(i, spaceNeeded, value);
    count = spaceNeeded;
    return this;
}

它將數字strait轉換為StringBuilder,避免了首先創建String的需要。

在我的具體示例中,是否有任何int值不能自動toString?

不。所有原始值都可以是toString。

我所知道的唯一例外是信令和安靜的Not-A-Number值,因為Java並不關心這些事情。 兩者都顯示為“NaN”,並且無法區分toString()(或Java中的大多數函數)

System.out.println("The number is " + Integer.toString(k));

在上面的打印“數字是”是字符串,所以字符串+(任何)只是字符串。所以在這種情況下,根本不需要調用toString()。所以如果你想打印k值,那么也不需要調用toString()as SOP internaqlly調用toString()。

所以最后,我們可以說除非特別想要將Integer轉換為String,否則不應該調用toString()方法。

使用第二個版本。 對於字符串連接表達式,如

"The number is " + k;

javac使用StringBuilder構建實際代碼

new StringBuilder("The number is ")).append(Integer.toString(k)).toString());

所以System.out.println只打印生成的字符串,完整的代碼是

System.out.println((new StringBuilder("The number is ")).append(Integer.toString(k)).toString());

它允許數字成為String數據類型,因此它都是一個字符串。 正如Mob所說,它甚至不是一個整數。 在成為一個整數之前,你必須將它解析為整數。

暫無
暫無

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

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