0

似乎弱类型的定义(不要与动态类型混淆)是当两个值都是不同类型时,二元运算符可以工作。

Python 程序员认为 Python 是强类型的,因为它1+"hello"会失败而不是默默地做其他事情。相反,通常被认为是弱类型的其他语言(例如 PHP、JavaScript、Perl)会静默地转换一个或两个操作数。例如,在 JavaScript 中是1+"hello"-> "1hello",而在 Perl 中是1+"hello"-> 1,但是1+"5"-> 6

现在,我的印象是 Java 被认为是一种强类型语言,但自动(取消)装箱和扩大转换似乎与此相矛盾。例如,1+new Integer(1)-> 2hello+"1"-> "hello1"'A'+1->66和 long 可以自动转换为 float,即使它通常会被截断。Java是弱类型的吗?弱类型、自动装箱和扩大转换之间有什么区别?

4

1 回答 1

4

弱类型是当编译器/解释器觉得需要时隐式执行某些转换和临时多态性。

自动装箱是在需要时将文字和非对象类型自动转换为各自的对象类型。(例如,Java 将允许您在字符串文字上调用方法,就好像它是字符串对象一样。)这与打字系统无关。避免显式创建对象实际上只是语法糖。

扩大转换是弱类型的一种形式。在非常严格的强类型语言中,这是不允许的。但是在像 Java 这样的语言中,它是允许的,因为它没有负面影响。如此微小的东西不足以不再将 Java 视为一种强类型语言。

Java 还为字符串连接重载了 + 运算符。这绝对是弱类型语言中的一个特性,但同样,这还不足以称 Java 为弱类型。(尽管我认为这是一个非常愚蠢的想法。)

于 2013-04-10T20:50:38.733 回答