tgoop.com/javapro_ir/4413
Create:
Last Update:
Last Update:
اگر سالها با Java کار کرده باشید، احتمالاً فکر میکنید همه چیز را میدانید — ترفندها، نکات و حتی مشکلات پنهان. اما جاوا مثل یک همکار قدیمی است؛ درست وقتی فکر میکنید او را کاملاً میشناسید، نکتهای جدید رو میکند که نگاهتان را تغییر میدهد.در اینجا چند واقعیت کمتر شناختهشده از جاوا را میبینید که حتی توسعهدهندگان باتجربه را هم غافلگیر میکند. اگر برای مصاحبهی شغلی آماده میشوید یا میخواهید مهارت جاوای خود را ارتقا دهید، این لیست به شما کمک خواهد کرد.
در جاوا، شما میتوانید null را به هر Reference Type مثل String یا Integer Cast کنید و Compiler هیچ خطایی نمیدهد. این کاملاً مجاز است — اما اگر بدون بررسی استفاده شود میتواند خطرناک باشد.
public class NullCastingExample {
public static void main(String[] args) {
// null can be cast to any reference type
String text = (String) null;
Integer number = (Integer) null;
// printing values
System.out.println("Text: " + text);
System.out.println("Number: " + number);
}
}
Text: null
Number: null
> اینجا خطای ClassCastException رخ نمیدهد چون شیء واقعی Cast نشده است. مشکل زمانی شروع میشود که متدی روی null فراخوانی کنید و با NullPointerException روبهرو شوید.
2️⃣ امکان داشتن چند متد main در یک کلاس
یک کلاس میتواند چند متد main داشته باشد. اما فقط متدی با امضای دقیق زیر بهعنوان نقطهی شروع برنامه شناخته میشود:
public static void main(String[] args)
بقیهی متدهای main صرفاً متدهای معمولی هستند و میتوانند پارامترهای مختلفی بگیرند.
public class MultiMainExample {
public static void main(String[] args) {
// this is the actual entry point
System.out.println("Main method with String[] args");
// calling the overloaded main method
main(42);
}
// overloaded main method with int parameter
public static void main(int number) {
System.out.println("Main method with int: " + number);
}
}
Main method with String[] args
Main method with int: 42
3️⃣ تفاوت عملگر == در مقایسهی String ها
عملگر == در جاوا برای مقایسهی Reference Equality (برابری آدرس حافظه) استفاده میشود. اما در مورد String Literals، به دلیل String Interning ممکن است گمراهکننده باشد.
public class StringComparison {
public static void main(String[] args) {
// string literals are interned
String a = "Java";
String b = "Java";
// new creates a separate object in the heap
String c = new String("Java");
// comparing references (true, same interned literal)
System.out.println(a == b);
// comparing references (false, different objects)
System.out.println(a == c);
// comparing actual values (true, values are equal)
System.out.println(a.equals(c));
}
}
اگر به اشتباه برای مقایسهی رشتهها از == استفاده کنید، ممکن است دچار باگهای ظریف شوید — مخصوصاً وقتی رشتهها بهصورت پویا ساخته میشوند. همیشه برای مقایسهی مقدار رشته از equals() استفاده کنید.
⚡️ @javapro_ir✈️ @group_javapro