gpt4 book ai didi

java - 双引号 ("") 与整数连接的目的

转载 作者:行者123 更新时间:2023-11-29 09:46:45 28 4
gpt4 key购买 nike

我刚刚开始阅读“Head First Java”这本书。由于下面代码中没有空格的双引号 (""),有一个练习让我感到困惑。我想我明白了,但看起来这本书并没有解释它,我想确保我是正确的。

下面代码中双引号 ("") 的目的是连接两个整数(x 和 y)并防止 + 运算符对输出执行加法吗?看起来就是这样。

下面代码的输出是:00 11 21 32 42。

我删除了双引号,输出结果为:0 2 3 5 6。

class Test
{
public static void main (String[] args)
{
int x = 0;
int y = 0;

while ( x < 5)
{
y = x - y;
System.out.print(x + "" + y + " ");
x = x + 1;
}
}
}

最佳答案

回答你的直接问题:你是正确的, "" 在那里将 + 变成一个连接,而不是加法。但我会提供一些关于这里发生的事情的更多细节。

这本书的作者在没有解释的情况下使用它可能有点不好,因为这似乎是练习中的关键(甚至是一个简短的脚注说“这只是一种转换为字符串的简单方法” );但这是大多数 Java 程序员甚至都不会考虑需要解释的事情之一,很容易被忽略;或者,也许他们之前确实解释过,而你只是错过了,因为解释的一次性性质。没有指控;就是这样。


我们正在尝试计算表达式 x + ""+ y + "" 以便打印它。因为 +left-associative ,这被评估为

((x + "") + y) + " "

因此,就包含 "" 的效果而言,问题是子表达式 x + "" 将如何求值。如果 "" 被省略,它将被评估为

(x + y) + " "

Java 中没有用于“数字加法”和“字符串连接”的单独运算符:两者都使用+。所以,Java uses a simple rule在两者之间做出决定:

If the type of either operand of a + operator is String, then the operation is string concatenation.

因此,x + "" 是字符串连接,而 x + y 是数字加法。

如果你查看 the specifics of string concatenation :

If only one operand expression is of type String, then string conversion (§5.1.11) is performed on the other operand to produce a string at run time.

也就是说,int + String 中的int 必须转换为字符串,以便与另一个字符串连接,这是很合理的。还有这个string conversion使用:

If T is byte, short, or int, then use new Integer(x).

...

the conversion is performed as if by an invocation of the toString method of the referenced object with no arguments

(“好像”只是一个回旋余地,表示您实际上不必调用new Integer(x) - 实现可以使用Integer。 toString(x),或其他一些方法。

然后,串联is defined as :

The characters of the left-hand operand precede the characters of the right-hand operand in the newly created string.

鉴于 "" 没有字符,someString + "" 将具有与 someString 相同的字符(* ).

因此,int + ""(或 ""+ int)只是将 int 转换为 的句法技巧>字符串。这样做没有其他效果。它只是比 Integer.toString(x)new Integer(x).toString() 更简洁。

同样值得指出的是,如果它是 ""+ x + y + "",它的工作原理也是一样的。但人眼可能不太清楚 xy 不会被添加。


(*) 这里的细节是连接会产生一个字符串(除非两个操作数是常量表达式,在这种情况下连接是在编译时完成的),即 someString + ""!= someString,即使 (someString + "").equals(someString)

关于java - 双引号 ("") 与整数连接的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58297636/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com