java scjp考试的一点问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 21:11:25
public class Test
{
public static void go(Long n)
{ System.out.println("long"); }
public static void go(Short n)
{System.out.println("short");}
public static void go(int n)
{System.out.println("int");}
public static void main(String[] a)
{
short y = 6;
long z = 7;

go(y);
go(z);
}

}

这里的输出为什么是int long 的?而不是short long呢?SCJP快要考试了,我这只是点还是不懂,请详细点回答,谢谢!

3个go方法中2个接收的参数都是引用类型的,1个是接收int类型的,而主方法中调用时传递的是原始数据类型,这时java会自动进行装箱操作,但前提是目前传递的参数和3个go方法的参数都不匹配的情况下!

所以,go(y)时,Long不匹配,Short也不匹配,而int匹配,原因是short比int的长度要小,int包括了short.
go(z)时,Long不匹配,Short也不匹配,而int也不匹配,原因是long比int的长度要长,int不包括long,所以这时要进行装箱操作,把long转换成了Long引用类型,所以输出的是int long.

整数的默认类型是 int

public static void go(Short n)
{System.out.println("short");}
public static void go(int n)
{System.out.println("int");}

定义了 int 和 Short参数。

short 类型,首先被匹配到 public static void go(int n)。
如果 定义 Short y=(short)6; 则会首先匹配到 public static void go(Short n)。

由于你需要传递的Long Short 类型 都是对象类型的,当你传递short的,找不到,所以就会类型提升至int,如果找不到int的,就会到Short。对于你传递的long的,由于long的类型提升不了,那么就只能到Long!

这个题目可以输出吗?
这个题编译都通不过,有问题的
,go(z)这个z的类型为long,没有和他相匹配的方法。
看这些类型 : byte short int long 依次由小到大,是可以自动转换的
也就是byte可以赋给short,short可以赋给int,int可以赋给long,这都不用我们写方法去换。
我们再看,z,是long类型,long的包装类是Long,要把long赋给Long
应该是Long L=new