包装类和方法重载的一些疑惑????
public class Close {
public static void go(Long n ){System.out.println("long1121");}
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[] args){
short y =6;
long z =7;
go(y);
go(z);
}
}
几点疑问:1)这里的y由于未找到相应的方法,因而其向更大范围的int转换???是否是这么理解的?
2)按照1)中的理解,这里的z无法调到符合类型的go方法,但结果却是输出long1121?
不是很明白,难道是仍然可以调到其包装类?还望大神帮小弟解答一下,谢谢各位大大了!!!!!
--------------------编程问答-------------------- 现在的jdk会自动装箱拆箱
匹配方法时不会遍历所有方法去找最接近的,而是找到能用的就调用了。
你可以把那个short的方法的申明方第一个看看 --------------------编程问答-------------------- 第一点理解的对
方法重载时首先编译器会列出所有调用的候选方法,然后进行重载解析,直到找到与实参匹配的方法,也就是这里的String类型参数的方法,当找不到该种实参类型的方法时会将其向上转型。
package csdn_test_bbs;
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(float n) {
System.out.println("float"); }
//public static void go(int n) {
//System.out.println("int"); }
public static void main(String[] args)
{
short y =6;
long z=7;
go(y);
go(z);
}
}
执行后output:float float
第二点,long无法向int自动转型的,只会向更高级的float,double。
假若注释掉go(Long n)方法,编译器会对go(z)报错,此时找不到与之匹配的方法。
另外,基本类型在堆栈中创建;而对于对象类型,对象在堆中创建,对象的引用在堆栈中创建。short y创建y变量后,编译器会优先在堆栈中匹配。(Short属于封装类,而short是基本数据类型) --------------------编程问答-------------------- 2楼string改为int
sorry about this --------------------编程问答-------------------- 在调用方法时,首先寻找参数类型相匹配的方法,如果没有则将实参自动向上转型,看是否有匹配的参数类型 --------------------编程问答-------------------- 在比int小的数据类型会自动转换成int类型,仅此而已 --------------------编程问答--------------------
是不是这么理解:
1)当传入类型的数据未找到相应类型方法时,其会自动向上转型.
2)当基本类型数据未找到相应类型数据时,其会自动的装包成相应的封装类,进而去调用该封装类? --------------------编程问答-------------------- 这里涉及到一般conversion of object reference Types
其实按你理解的就行,实际上是内存中的细节
补充:Java , Java SE