logo

Java programos išvestis | 5 rinkinys

Numatykite šių „Java“ programų išvestį.
1 programa:  
 

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 

Išvestis :

String


Paaiškinimas : Tuo atveju metodo perkrova kompiliavimo metu pasirenkamas konkretiausias metodas. Kadangi „java.lang.String“ yra konkretesnis tipas nei „java.lang.Object“. Šiuo atveju pasirenkamas metodas, kurio parametras yra "Eilutė". 
2 programa:  
 



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 

Išvestis:  
 

Compile Error at line 19.


Paaiškinimas: Šiuo atveju metodas Perkrovimas kompiliavimo metu pasirenkamas konkretiausias metodas. 
Kadangi „java.lang.String“ ir „java.lang.Integer“ yra konkretesnis tipas nei „java.lang.Object“, tačiau tarp „java.lang.String“ ir „java.lang.Integer“ nė vienas nėra konkretesnis. 
Tokiu atveju „Java“ negali nuspręsti, kurį metodą iškviesti. 
3 programa:  
 

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 

Išvestis: 
 

abcd abc false abcd abcd true


Paaiškinimas: Java „String“ yra nekintantis, o eilučių buferis – kintamas. 
Taigi eilutės s2 ir s1 nurodo tą pačią eilutę abc. Ir atlikus pakeitimus, eilutė s1 nurodo į abcd, o s2 – į abc, todėl klaidinga. Stygos buferyje ir sb1, ir sb2 nukreipia į tą patį objektą. Kadangi eilučių buferis yra kintamas, pakeitus vieną eilutę, pakeisite ir kitą eilutę. Taigi abi eilutės vis dar nukreipia į tą patį objektą po to, kai atlikote objekto pakeitimus (čia sb2).
4 programa:  
 

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 

Išvestis:  
 

Compile Error at line 8


Paaiškinimas:  
1. 12 eilutėje „println“ reiškia, kad skaičiai automatiškai perduodami kaip eilutės. Taigi jis neprideda, o pridedamas kaip eilutė. 
2. 11 eilutėje += automatiškai perduoda trumpą. Tačiau skaičius 123456 negali būti trumpas, todėl jūs gaunate neigiamą reikšmę (-7616). 
(PASTABA – trumpi 2 baitai nuo 32768 iki 32767) Čia skaičius 123456 nereiškia, kad int zit reikšmė rodo int vertės ilgį 
3. Tos kitos dvi yra raudonosios silkės, nes kodas niekada nebus sudarytas dėl 8 eilutės. 
Bet koks skaičius, prasidedantis nuliu, laikomas aštuntuoju skaičiumi (kuris yra 0–7).
 

Raskite užblokuotus numerius „Android“.