Preziceți rezultatul următoarelor programe Java.
Programul 1:
// 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
Ieșire :
String
Explicaţie : În cazul supraîncărcarea metodei cea mai specifică metodă este aleasă în timpul compilării. Deoarece „java.lang.String” este un tip mai specific decât „java.lang.Object”. În acest caz, este aleasă metoda care ia „String” ca parametru.
Programul 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
Ieșire:
Compile Error at line 19.
Explicaţie: În acest caz de metoda Supraîncărcare cea mai specifică metodă este aleasă în timpul compilării.
Deoarece „java.lang.String” și „java.lang.Integer” este un tip mai specific decât „java.lang.Object”, dar între „java.lang.String” și „java.lang.Integer” niciunul nu este mai specific.
În acest caz, Java nu poate decide ce metodă să apeleze.
Programul 3:
// 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
Ieșire:
abcd abc false abcd abcd true
Explicatie: În Java String este imuabil, iar string buffer este mutabil.
Deci șirul s2 și s1 indicând ambele către același șir abc. Și după efectuarea modificărilor, șirul s1 indică abcd și s2 indică abc, deci fals. În timp ce se află în string buffer, ambele sb1 și sb2 indică același obiect. Deoarece string buffer sunt modificabile, efectuând modificări într-un șir, faceți modificări și în celălalt șir. Deci ambele șiruri indică în continuare către același obiect după ce au făcut modificări la obiect (aici sb2).
Programul 4:
// 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
Ieșire:
Compile Error at line 8
Explicaţie:
1. În rândul 12 „” din println face ca numerele să fie automat turnate ca șiruri. Deci nu face adunări, ci se adaugă împreună ca șir.
2. În Linia 11, += face o distribuție automată la un scurt. Cu toate acestea, numărul 123456 nu poate fi conținut într-un scurt, așa că ajungeți cu o valoare negativă (-7616).
(NOTĂ - scurt 2 octeți -32768 la 32767) Aici numărul 123456 nu înseamnă că Valoarea int zit arată lungimea valorii int
3. Celelalte două sunt totuși, deoarece codul nu se va compila niciodată din cauza liniei 8.
Orice număr care începe cu zero este tratat ca un număr octal (care este 0-7).
citind dintr-un fișier csv în java