2

我熟悉什么是强类型和弱类型。我也知道 Java 是强类型的。现在我学习python,它是一种强类型语言。但是现在我看到 python 比 Java 是“更多”的强类型。举例说明

public class StringConcat {

  public static void main(String[] args) {
      String s="hello ";
      s+=4;
    System.out.println(s);
}
}

没有错误并打印 hello 4

在蟒蛇

>>> x="hello"
>>> x+=4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

所以这个例子展示了python是强类型的。除非 Java 在引擎盖下,做一些操作将 int 转换为 String 并执行 String concat。

4

3 回答 3

7

尽管有您的示例,Java 仍然是强类型的。代码相当于

String s = "hello ";
s = s + 4;

Java 会将 转换4为字符串,然后执行字符串连接。这是一个语言特性。

但是,在 Python 中,您不能使用+连接4到您的字符串,因为该语言不会随意将其转换为str. 正如您所指出的,Java 在后台为您做到了这一点。

于 2013-08-30T00:06:21.093 回答
1

这个例子并不能证明 Java 不是强类型的。只有一个隐式的字符串转换(JLS,第 5.1.11 节)在幕后进行。

首先,转换为引用类型以Integerint字面量 ( new Integer(4)) 创建 an,然后toString()调用以将其转换为String用于连接的 a。

于 2013-08-30T00:06:51.747 回答
0

如果你想要另一个有趣的例子,你可以在很多地方找到丑陋的

整数+""

将数字转换为字符串。程序员很懒不想写

Integer.toString(intNumber)

这会在运行时导致字符串转换和无用的字符串连接。

这并不意味着 Java 不是强类型的,只是所有对象都需要一个 toString() 方法,并且所有基元都可以自动装箱和拆箱到它们的非基元对应物(int -> Integer,long -> Long 等。 ),它实现了 toString(),而 java 中的 "+" 充当字符串连接。

于 2013-08-30T00:16:39.790 回答