我在J2ME中编写了一些代码.我有一个方法课setTableId(Short tableId).现在当我尝试编写setTableId(100)它时会出现编译时错误.如何在不声明另一个短变量的情况下设置短值?
设置Long值时,我可以使用setLongValue(100L)它,它的工作原理.那么,L这里的含义是什么,Short价值的特征是什么?
谢谢
请考虑2个案例:
//1
Short s = 10; //obviously compiles
//2
takeShort(10); //error - int is not applicable
//where:
static void takeShort(Short s) {}
Run Code Online (Sandbox Code Playgroud)
我假设情况1被编译器更改为:
short _temp_s = 10;
Short s = Short.valueOf(_temp_s);
Run Code Online (Sandbox Code Playgroud)
你能否解释一下编译器在案例2中尝试做什么,所以它不能编译?如果它不像在案例1中那样尝试应用自动装箱,那么为什么呢?
编辑
johnchen902中对JSL的引用解释了编译器的行为.
仍然不完全清楚为什么JLS不支持方法调用转换的"缩小原始转换后跟装箱转换",因为它在分配转换中为byte,short,char或int类型的常量表达式的情况.有任何想法吗 ?