Передбачте вихід наступних програм 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'. У цьому випадку вибирається метод, який приймає «Рядок» як параметр.
Програма 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 String незмінний, а рядковий буфер змінний.
Отже, рядки 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).
знайти заблоковані номери на android