Aşağıdaki Java Programlarının çıktısını tahmin edin.
Program 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
Çıkış :
String
Açıklama : Şu durumda yöntem aşırı yüklemesi derleme zamanında en spesifik yöntem seçilir. 'Java.lang.String', 'java.lang.Object'ten daha spesifik bir tür olduğundan. Bu durumda 'String'i parametre olarak alan yöntem seçilir.
Program 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
Çıkış:
Compile Error at line 19.
Açıklama: Bu durumda yöntem Aşırı yükleme derleme zamanında en spesifik yöntem seçilir.
'Java.lang.String' ve 'java.lang.Integer', 'java.lang.Object'ten daha spesifik bir tür olduğundan, 'java.lang.String' ve 'java.lang.Integer' arasında hiçbiri daha spesifik değildir.
Bu durumda Java hangi yöntemin çağrılacağına karar veremez.
Program 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
Çıkış:
abcd abc false abcd abcd true
Açıklama : Java'da String değişmez ve dize arabelleği değiştirilebilir.
Yani s2 dizisi ve s1 dizisinin her ikisi de aynı abc dizisine işaret ediyor. Ve değişiklikleri yaptıktan sonra s1 dizgesi abcd'yi ve s2 dizgesi abc'yi işaret eder, dolayısıyla yanlıştır. Dize arabelleğindeyken hem sb1 hem de sb2 aynı nesneyi işaret eder. Dize arabelleği değiştirilebilir olduğundan, bir dizede değişiklik yapmak diğer dizede de değişiklik yapar. Yani nesnede değişiklik yaptıktan sonra her iki dize de hala aynı nesneyi işaret ediyor (burada sb2).
Program 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
Çıkış:
Compile Error at line 8
Açıklama:
1. 12. Satırda Println'deki '', sayıların otomatik olarak dize olarak dönüştürülmesine neden olur. Yani toplama yapmaz ancak dize olarak birbirine eklenir.
2. Satır 11'de += kısa devreyi otomatik olarak değiştirir. Ancak 123456 sayısı kısa devrenin içinde yer alamaz, dolayısıyla negatif bir değerle (-7616) karşılaşırsınız.
(NOT - kısa 2 bayt -32768 ila 32767) Burada 123456 sayısı int değerinin uzunluğu anlamına gelmez, zit int değerinin uzunluğunu gösterir
3. Diğer ikisi kırmızı ringa balığıdır, ancak kod 8. satır nedeniyle hiçbir zaman derlenmeyecektir.
Sıfırla başlayan herhangi bir sayı, sekizlik bir sayı (0-7 arası) olarak kabul edilir.
internet bankacılığının dezavantajları