Uitvoer van Java-programma | Stel 5 in
Voorspel de uitvoer van de volgende Java-programma's.
Programma 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
Uitvoer :
String
Uitleg : In het geval van methode overbelasting de meest specifieke methode wordt tijdens het compileren gekozen. Omdat 'java.lang.String' een specifieker type is dan 'java.lang.Object'. In dit geval wordt de methode gekozen die 'String' als parameter gebruikt.
Programma 2:
// 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
Uitgang:
Compile Error at line 19.
Uitleg: In dit geval van methode Overbelasting de meest specifieke methode wordt tijdens het compileren gekozen.
Omdat 'java.lang.String' en 'java.lang.Integer' een specifieker type is dan 'java.lang.Object', maar tussen 'java.lang.String' en 'java.lang.Integer' is niets specifieker.
In dit geval kan Java niet beslissen welke methode moet worden aangeroepen.
Programma 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
Uitgang:
abcd abc false abcd abcd true
Uitleg : In Java is String onveranderlijk en is de stringbuffer veranderlijk.
Dus string s2 en s1 wijzen beide naar dezelfde string abc. En na het aanbrengen van de wijzigingen wijst de string s1 naar abcd en s2 naar abc, dus false. Terwijl in de stringbuffer zowel sb1 als sb2 naar hetzelfde object verwijzen. Omdat stringbuffers veranderlijk zijn, kunnen wijzigingen in de ene string ook wijzigingen aanbrengen in de andere string. Dus beide strings wijzen nog steeds naar hetzelfde object nadat de wijzigingen aan het object zijn aangebracht (hier sb2).
Programma 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
Uitgang:
Compile Error at line 8
Uitleg:
1. In regel 12 zorgt de '' in de println ervoor dat de getallen automatisch als strings worden weergegeven. Er wordt dus niet opgeteld, maar aan elkaar toegevoegd als tekenreeks.
2. In Line11 doet de += een automatische cast naar een korte film. Het getal 123456 kan echter niet in een kortsluiting worden opgenomen, zodat u uiteindelijk een negatieve waarde (-7616) krijgt.
(LET OP - kort 2 bytes -32768 tot 32767) Hier betekent het getal 123456 niet dat de waarde van int zit de lengte van de int-waarde aangeeft
3. Die andere twee zijn echter een afleidingsmanoeuvre, omdat de code nooit zal worden gecompileerd vanwege regel 8.
Elk getal dat met nul begint, wordt behandeld als een octaal getal (dat is 0-7).