Js和Java字符串和包装类型

熟悉了javascript,开始写java发现如下写法不能通过编译,因为这里root.value是Object,而’ ‘是一个char类型(基本类型),使用+运算符的时候由于类型不匹配产生错误。

在这种上下文环境中,(+) 号意味着 “字符串的连接”,并且如果必要他还执行字符串的转换。规则如下:当编译器观察到一个 String 后面紧跟着一个 (+) 号,而这个 (+) 号后面又紧跟着一个非 String 类型的元素时,就会尝试着将这个非 String 类型的参数转换为 String 类型。而我的代码中编译器不会把字符看作字符串,就不会进行类型转换,发生错误。

而这样写在js中是没有问题的。

因为js没有char类型,虽然String类型是js的原始类型,为了便于操作基本类型值,ECMAScript 还提供了 3 个特殊的引用类型:Boolean、Number 和String。实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。

也就是说当编译器读到一个String类型时(基本类型)会自动创建一个它相应的包装类来使用方法。这个包装类在执行完操作之后会被清除,因此只是在读取到这个变量时可以使用包装类的方法,并不意味着发生了类型转换。

所以js中我的写法能通过是因为编译器自动将’ ‘类型转为了String对象。而java没有这样的机制