के मामले में कॉल करने के लिए JVM विधि (निकटतम मिलान वाला पैरामीटर) कैसे पाता है JVM संकलित समय पर कॉल करने के लिए कौन सी अधिभारित विधि तय करता है। मैं एक उदाहरण है: अगर मैंफ़ंक्शन ओवरलोडिंग
takes int
takes Long
takes Short
हालांकि: मेरी समझ के अनुसार
public class MainClass{
public static void go(Long n) {System.out.println("takes Long ");}
public static void go(Short n) {System.out.println("takes Short ");}
public static void go(int n) {System.out.println("takes int ");}
public static void main(String [] args) {
short y = 6;
long z = 7;
go(y);
go(z);
go((Short)y);
}
}
, यह निम्न प्रिंट चाहिए:
takes Short
takes Long
takes Short
... लेकिन वास्तविक उत्पादन होता है निम्नलिखित तीन कार्य:
public static void go(Integer n) {System.out.println("takes Integer");}
public static void go(Long n) {System.out.println("takes Long ");}
public static void go(Short n) {System.out.println("takes Short ");}
... और यह का उपयोग कर फोन:
int a= 10; and go(i); //output : takes Integer.
... क्यों है short
और int
के लिए एक अंतर है?
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.4 – kosa
संभावित डुप्लिकेट http://stackoverflow.com/ क्यू/6268157/2087187 – EProgrammerNotFound