logo

Излаз Јава програма | Сет 5

Предвидите излаз следећих Јава програма.
Програм 1:  
 

Java
// Main.java public class Main {  public static void gfg(String s)  {   System.out.println('String');  }  public static void gfg(Object o)  {  System.out.println('Object');  }  public static void main(String args[])  {  gfg(null);  } } //end class 

Излаз :

String


Објашњење : У случају преоптерећење метода најспецифичнији метод се бира у време компајлирања. Пошто је 'јава.ланг.Стринг' специфичнији тип од 'јава.ланг.Објецт'. У овом случају се бира метод који узима 'Стринг' као параметар. 
Програм 2:  
 



Java
// Main.java public class Main {  public static void gfg(String s)  {   System.out.println('String');  }  public static void gfg(Object o)  {  System.out.println('Object');  }  public static void gfg(Integer i)  {  System.out.println('Integer');  }  public static void main(String args[])  {  gfg(null);  } } //end class 

Излаз:  
 

Compile Error at line 19.


Објашњење: У овом случају од метод Преоптерећење најспецифичнији метод се бира у време компајлирања. 
Пошто су 'јава.ланг.Стринг' и 'јава.ланг.Интегер' специфичнији тип од 'јава.ланг.Објецт', али између 'јава.ланг.Стринг' и 'јава.ланг.Интегер' ниједан није конкретнији. 
У овом случају Јава не може да одлучи који метод да позове. 
Програм 3:  
 

Java
// Main.java public class Main {  public static void main(String args[])  {  String s1 = 'abc';  String s2 = s1;  s1 += 'd';  System.out.println(s1 + ' ' + s2 + ' ' + (s1 == s2));  StringBuffer sb1 = new StringBuffer('abc');  StringBuffer sb2 = sb1;  sb1.append('d');  System.out.println(sb1 + ' ' + sb2 + ' ' + (sb1 == sb2));  } } //end class 

Излаз: 
 

abcd abc false abcd abcd true


Објашњење: У Јави стринг је непроменљив, а бафер стрингова је променљив. 
Дакле, низ с2 и с1 оба показују на исти низ абц. И након измена, стринг с1 указује на абцд, а с2 на абц, дакле нетачно. Док су у баферу стрингова и сб1 и сб2 оба упућују на исти објекат. Пошто су бафери стрингова променљиви, уносећи измене у један стринг такође уносите промене у други низ. Дакле, оба низа и даље показују на исти објекат након што су извршили измене на објекту (овде сб2).
Програм 4:  
 

Java
// Main.java public class Main {  public static void main(String args[])  {  short s = 0;  int x = 07;  int y = 08;  int z = 112345;  s += z;  System.out.println('' + x + y + s);  } } //end class 

Излаз:  
 

Compile Error at line 8


Објашњење:  
1. У реду 12 '' у принтлн-у узрокује да се бројеви аутоматски претворе у низове. Дакле, не врши сабирање, већ се додаје заједно као низ. 
2. У реду 11 += врши аутоматско пребацивање на кратки. Међутим, број 123456 не може бити садржан у кратком року, тако да ћете на крају добити негативну вредност (-7616). 
(НАПОМЕНА - кратка 2 бајта -32768 до 32767) Овде број 123456 не значи да вредност инт зит показује дужину инт вредности 
3. Остале две су црвене харинге, међутим, пошто се код никада неће компајлирати због реда 8. 
Сваки број који почиње нулом третира се као октални број (који је 0-7).
 

поверсхелл већи или једнак