在以下代码中
Vector v = new Vector();
v.add('c');
1.5中允许 v.add('c')
,我认为这可能是因为1.5的自动装箱功能。
但我很惊讶地发现在1.4 v.add('c')
中,允许使用字符文字作为add方法的对象类型方法参数。
这是否意味着字符文字被视为对象?
在发布问题之前,我通过执行“Integer i = 1”在我的Intellij IDE上进行交叉检查,IDE在该行上显示红色错误符号。但IDE未能在v.add('Y')语句中这样做。它没有显示任何错误。 无论如何它现在清楚了。 v.add('Y')不能在1.4或更早版本中编译。 感谢您的投入。我相信有时候最好去贝壳并检查那里。嗯......
答案 0 :(得分:4)
我不确定你是如何编译它的,但不应该允许它。你确定你已经在1.4中编译了它吗?
这是我得到的
$ javac -target 1.4 -source 1.4 X.java
X.java:4: cannot find symbol
symbol : method add(char)
location: class java.util.Vector
v.add('Y');
^
1 error
答案 1 :(得分:1)
在源兼容性设置为1.4的情况下无法编译:
javac -source 1.4 VectorTest.java
VectorTest.java:6: cannot find symbol
symbol : method add(char)
location: class java.util.Vector
v.add('x');
^
1 error
答案 2 :(得分:1)
@ beny23和@ataylor正确地指出你没有真正在Java 1.4中编译,或者使用正确的标志来在更高版本的Java中执行等效操作。
我只想指出,无论你做了什么编译,代码都不会在真正的Java 1.4 JVM上运行。自动装箱char
实际上只是调用Character.valueOf(char)
的“语法糖”。问题是该方法不存在Character
的Java 1.4版本。根据javadoc,该方法已添加到Java 1.5中。