Предскажете изхода на следните Java програми.
Програма 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
Изход :
String
Обяснение : В случай на претоварване на метода най-специфичният метод се избира по време на компилиране. Тъй като „java.lang.String“ е по-специфичен тип от „java.lang.Object“. В този случай се избира методът, който приема '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.
Обяснение: В този случай на метод Претоварване най-специфичният метод се избира по време на компилиране.
Тъй като „java.lang.String“ и „java.lang.Integer“ е по-специфичен тип от „java.lang.Object“, но между „java.lang.String“ и „java.lang.Integer“ никой не е по-специфичен.
В този случай Java не може да реши кой метод да извика.
Програма 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
Изход:
abcd abc false abcd abcd true
Обяснение: В Java низът е неизменен и буферът на низ е променлив.
И така, низовете s2 и s1 сочат към един и същи низ abc. И след като направите промените, низът s1 сочи към abcd, а s2 сочи към abc, следователно е false. Докато в низовия буфер и sb1, и sb2 сочат към един и същ обект. Тъй като низовият буфер е променлив, извършването на промени в един низ също прави промени в другия низ. Така че и двата низа все още сочат към същия обект след извършване на промените в обекта (тук sb2).
Програма 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
Изход:
Compile Error at line 8
Обяснение:
1. В ред 12 '' в println кара числата да бъдат автоматично преобразувани като низове. Така че не прави добавяне, а добавя заедно като низ.
2. В ред 11 += прави автоматично прехвърляне към кратко. Числото 123456 обаче не може да се съдържа в шорт, така че в крайна сметка получавате отрицателна стойност (-7616).
(ЗАБЕЛЕЖКА - кратки 2 байта от -32768 до 32767) Тук числото 123456 не означава, че стойността на int zit показва дължината на int стойността
3. Тези други две обаче са лоши, тъй като кодът никога няма да се компилира поради ред 8.
Всяко число, започващо с нула, се третира като осмично число (което е 0-7).
анализиране на низ към int