1

有人可以解释为什么 Java 在以下示例中连接字符串和整数吗?

public class main {

    public static void main(String[] args) {
        System.out.println("test" + 5);
        System.out.println(5 + "5");
    }

}

以及与 Python 对运算符的实现有什么区别+

在 Python 中,这会引发TypeError

"5" + 5
4

7 回答 7

6

是什么让您认为+两种不同语言的行为方式应该相同?在 Java 中,当你有类似的东西时

System.out.println(5 + "5");
55

如您所见,执行字符串连接。Java 语言规范对此进行了概述(请参阅JLS §15.18.1)。相比之下,Python 不会强制使用 Java 之类的类型(因此是TypeError);为了发生字符串连接,两个操作数都+必须是字符串,这就是您需要的原因

>>> "5" + str(5)
'55'

这在 Python 的规范中有概述(参见Python 语言参考 §5.6)。没有普遍的规则规定状态+必须以特定的方式跨语言运行:如果我愿意,我可以创建一种+执行减法的语言!

正如@Wooble指出的那样,Perl 的+行为还有另一种方式:

$ perl -e 'print 5 + "5"; print "\n"'
10
于 2013-08-21T15:25:40.093 回答
0

基本上在 Python 中,您必须执行以下操作:

"5" + str(5)

因为,尽管在 Python 和 Java 中都为字符串对覆盖了运算符 +,但在 Python 中,对于字符串和整数,没有适当的覆盖,并且在需要时不会将整数隐式转换为字符串。因此,您需要将 5 显式转换为字符串,以便在连接的两侧都有字符串。

于 2013-08-21T15:27:41.223 回答
0

简单地说,在 Java 中,+操作符对于字符串是重载的。Python 显然没有实现该覆盖,因此您需要找出 Python 的连接运算符是什么,以使后一种情况起作用。

于 2013-08-21T15:21:47.900 回答
0

您会收到 TypeError,因为“5”是字符串类型,而 5 是 int 类型。就像有人说的那样,这就是它的设计方式。我猜测部分是为了防止混淆。您希望“5”+5 等于 10 还是 55?

如果你想要 55,你可以通过将 int 转换为字符串来做到这一点

'5' + str(5)
于 2013-08-21T15:25:47.227 回答
0

如果您检查文档

Java 语言为字符串连接运算符 ( + ) 以及将其他对象转换为字符串提供了特殊支持。字符串连接是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。

所以,它是java特定的

于 2013-08-21T15:25:54.660 回答
0

编译器 java 在内部将 5 + "5" 转换为 StringBuilder 并使用 .append(int) 将整数“添加”到字符串中。

于 2013-08-21T15:29:18.263 回答
0

在 java 中,如果 a + b 中有字符串类型,则 + 将进行连接,而在 python 中,默认情况下没有定义两种不同类型的 +。因此,正如所建议的,在 python 中,需要在连接之前执行 str(Int) 。

于 2013-08-21T15:33:49.797 回答