Integer.valueOf
接受String
和int
作为参数,但是当我传递Character
时,它不需要强制转换,编译器也不执行任何操作。
字符不扩展String
类,它仅实现Serializable
和Comparable
Character charc = '1';
System.out.println(Integer.valueOf(charc));
System.out.println(Integer.valueOf(charc.toString()));
输出:
49
1
这不是设计上的缺陷,还是我在错误的方向上思考? 拒绝投票时,请在评论中写下原因。
答案 0 :(得分:6)
JLS 5.2, Assignment conversion特别涵盖了这一点。 (将参数传递给方法实质上就像为变量分配值一样。)
分配上下文允许使用以下之一:
...
- 取消装箱转换(第5.1.8节),然后可以选择扩展原始转换。
这里发生的事情是Character
取消装箱到char
;然后将char
扩展为int
。
答案 1 :(得分:2)
char
ist自动加宽为int,这对于Integer.valueOf()
来说是完美有效的参数
如果所需类型包含所有当前类型,例如char到int或int到long,则Java自动转换某些类型。有关详细信息,请参见Java Language Specification。