Prediu la sortida dels següents programes Java.
Programa 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
Sortida :
String
Explicació : En cas de sobrecàrrega del mètode el mètode més específic s'escull en temps de compilació. Com que 'java.lang.String' és un tipus més específic que 'java.lang.Object'. En aquest cas s'escull el mètode que pren 'String' com a paràmetre.
Programa 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
Sortida:
Compile Error at line 19.
Explicació: En aquest cas de Sobrecàrrega del mètode el mètode més específic s'escull en temps de compilació.
Com que "java.lang.String" i "java.lang.Integer" és un tipus més específic que "java.lang.Object", però entre "java.lang.String" i "java.lang.Integer" cap és més específic.
En aquest cas, Java no pot decidir quin mètode cridar.
Programa 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
Sortida:
abcd abc false abcd abcd true
Explicació: A Java, la cadena és immutable i la memòria intermèdia és mutable.
Així que la cadena s2 i s1 apunten a la mateixa cadena abc. I després de fer els canvis, la cadena s1 apunta a abcd i s2 apunta a abc, per tant, fals. Mentre es troben al buffer de cadena, tant sb1 com sb2 apunten al mateix objecte. Com que la memòria intermèdia de cadena és mutable, fent canvis en una cadena també es fan canvis a l'altra cadena. Així, ambdues cadenes continuen apuntant al mateix objecte després de fer els canvis a l'objecte (aquí sb2).
Programa 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
Sortida:
Compile Error at line 8
Explicació:
1. A la línia 12, la '' a println fa que els números s'emetin automàticament com a cadenes. Per tant, no fa una suma sinó que s'afegeix com a cadena.
2. A la línia 11, el += fa un llançament automàtic a un curt. Tanmateix, el número 123456 no es pot contenir en un curt, de manera que acabeu amb un valor negatiu (-7616).
(NOTA: 2 bytes curts -32768 a 32767) Aquí el número 123456 no vol dir que el valor de int zit mostra la longitud del valor int
3. Els altres dos són, però, ja que el codi no es compilarà mai a causa de la línia 8.
Qualsevol nombre que comenci per zero es tracta com un nombre octal (que és 0-7).
tanca la sessió del compte de Google a Android