似乎弱类型的定义(不要与动态类型混淆)是当两个值都是不同类型时,二元运算符可以工作。
Python 程序员认为 Python 是强类型的,因为它1+"hello"
会失败而不是默默地做其他事情。相反,通常被认为是弱类型的其他语言(例如 PHP、JavaScript、Perl)会静默地转换一个或两个操作数。例如,在 JavaScript 中是1+"hello"
-> "1hello"
,而在 Perl 中是1+"hello"
-> 1
,但是1+"5"
-> 6
。
现在,我的印象是 Java 被认为是一种强类型语言,但自动(取消)装箱和扩大转换似乎与此相矛盾。例如,1+new Integer(1)
-> 2
、hello+"1"
-> "hello1"
、'A'+1
->66
和 long 可以自动转换为 float,即使它通常会被截断。Java是弱类型的吗?弱类型、自动装箱和扩大转换之间有什么区别?