是Java弱类型,因为这个例子演示了与python相比时?

is Java weak typed as this example demonstrates when compared with python?

我熟悉什么是强弱型。我也知道Java是强类型的。现在我学习了Python,它是一种强类型语言。但现在我看到Python比Java更"强"类型化。举例说明

1
2
3
4
5
6
7
8
public class StringConcat {

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

没有错误,打印hello 4

在Python中

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

所以这个例子演示了python是强类型的。除非在Hub下有Java,否则需要进行一些操作来将int转换为String,并执行String CONTAT。


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

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

Java会将EDCOX1的0进制转换成字符串,然后执行字符串连接。这是语言功能。

然而,在python中,不能使用+4连接到字符串,因为该语言不能自由地将其转换为str。正如你指出的,Java在引擎盖下为你做这件事。


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

首先,转换到引用类型是为了从int字(new Integer(4)创建Integer,然后调用toString()将其转换为String进行连接。


如果你想再举一个有趣的例子,你可以在很多地方发现

因特+

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

integer.toString(整数)

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

这并不意味着Java不是强类型化的,只是所有的对象都需要有一个toString()方法,并且所有的原语都可以自动装箱和解压到它们的非原始的对应(INT-整数,长->长等等),实现ToString(),而"+"在Java中充当字符串连接。