繁体   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