11. public class Yikes {
12.
13. public static void go(Long n) {System.out.println(”Long “);}
14. public static void go(Short n) {System.out.println(”Short “);}
15. public static void go(int n) {System.out.println(”int “);}
16. public static void main(String [] args) {
17. short y= 6;
18. long z= 7;
19. go(y);
20. go(z);
21. }
22. }输出为int Long为什么不是Short Long???
12.
13. public static void go(Long n) {System.out.println(”Long “);}
14. public static void go(Short n) {System.out.println(”Short “);}
15. public static void go(int n) {System.out.println(”int “);}
16. public static void main(String [] args) {
17. short y= 6;
18. long z= 7;
19. go(y);
20. go(z);
21. }
22. }输出为int Long为什么不是Short Long???
这里的6为int型,所以赋值后你的y也是int型了,这是隐式类型转换
而long z=7;
这里的7依然为int型,但是你的z的类型long不会被转化为int型,z依然为long型
建议楼主看下java数据类型
如果不想转换,可以写成short y = 6S;
在你的方法里就选择用值的那个,也是因为short与int兼容
电脑是很懒的,你给他一个参数,他发现是可以自动转换的,就转成int了
但是如果级别比int高 如这里的long ,不能转换了,所以这时候它才用其他复杂的方法,
如这里用的是 自动封箱解箱当然 如果你的类型他直接可以找到的话,他就会什么都不做,直接传。
就是10楼的那种情况了
13. public static void go(Long n) {System.out.println(”Long “);}
14. public static void go(Short n) {System.out.println(”Short “);}
13,14行入参类型"Long"和"Short"你大写了,大写和小写就区别可大了,大写就成了类,那么这里的n就是对象的引用了。
数据类型分为:1--primivte和2---reference,你在main()方法里定义的y,z都是primivte,又因为primitive中的【整型值】byte-short-int-long四种中的缺省值是int型,又因为short变int是显示转换,所以你go(y)时go()方法会先找入参类型与实参类型匹配的,就是都是primitive的,就找到15:public static void go(int n) {System.out.println(”int “);}所以出int.
而long型值就不能显示转换为int了,所以go(z)时,他找不到可以匹配的primivte类型,就找到自己的封装类Long,因为Long 类在对象中包装了基本类型 long 的值。(估计这里面有个优先级的关系)
楼主可以实验下:①把15行屏蔽就出Short Long ②或者把15行里int改成类Integer,还是出Short Long ③或者把14行里Short改成short还是出Short Long.
另外5楼的是错误的,【整型值】只有long型值才可以在数字后面加"l"(不是1);
java计算都是最小就是int型 不是int型比他小的都转换为int
数据类型中自动提升哈byte-short-int-long