java - 弱类型、自动装箱、扩大转换之间有什么区别?

标签 java php javascript python weak-typing

<分区>

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

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,即使它通常会被 chop 。 Java 是弱类型的吗?弱类型、自动装箱和扩大转换之间有什么区别?

最佳答案

弱类型是指在编译器/解释器认为需要时隐式执行某些转换和临时多态性。

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

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

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

关于java - 弱类型、自动装箱、扩大转换之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935699/

相关文章:

java - Maven 构建期间出现 Lambda 错误

java - 如何使用 fragment 将联系人选择到编辑文本中

java - Forefront TMG 与 java 和 php (ftp)

javascript - .ajaxComplete 不工作

javascript - 如果 mousedown 则触发 mousemove 否则不执行任何操作

java - 以 maner 方式设置 JTextField 宽度以包装给定文本

php - PHP 7.4不推荐使用get_magic_quotes_gpc函数替代

php - 选择 future 14 天内的日期范围

javascript - 将同步代码插入异步代码

Java - 为什么控制台上的输出为空?