为什么我应该使用Integer.toString()而不是只打印Integer?

Mik*_*ike 7 java integer tostring

我正在学习Java教程,它让我做了类似的事情:

int k = 5;
System.out.println("The number is " + Integer.toString(k));
Run Code Online (Sandbox Code Playgroud)

就像我跟随的一项好运动一样,但我不禁要问,为什么要使用这种方法呢?看起来像很多额外的打字来获得相同的功能:

int k = 5;
System.out.println("The number is " + k);
Run Code Online (Sandbox Code Playgroud)

是否有充分的理由将该toString()方法用于非字符串数据类型?在我的具体示例中,是否有任何int值不能自动toString?

rob*_*rob 19

它是众多"安全编程"实践中的一种,您可以采用这些实践来提高清晰度并防止您或代码的未来维护者可能引入的细微错误.请看以下示例:

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

输出: number=5

现在假设您要先打印数字,最后打印文本.我正在做的就是交换字符串连接中的第一个和最后一个项目:

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

输出: 66number

哎呀!=添加了int值k而不是连接.一种解决方案是将其=变为a String.另一个解决方案是显式转换intString:

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

输出: 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

114
2+3=5
Run Code Online (Sandbox Code Playgroud)

  • 使用toString的一个很好的例子 (5认同)

Pet*_*rey 5

是否有充分的理由对非字符串数据类型使用toString()方法?

有些人认为它更清楚.esp对于那些可能没有意识到他们基本上做同样事情的初学者.

注意:在Java 7 update 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;
}
Run Code Online (Sandbox Code Playgroud)

它将数字strait转换为StringBuilder,避免了首先创建String的需要.

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

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

我所知道的唯一例外是信令和安静的Not-A-Number值,因为Java并不关心这些事情.两者都显示为"NaN",并且无法区分toString()(或Java中的大多数函数)