Гаразд, так працюють типи даних на Java. (Ви маєте вибачення з моєї англійської, я намагаюся не використовувати правильний vocab. Ви повинні розмежовувати два з них. Базові типи даних і звичайні типи даних. Базові типи даних в значній мірі складають все, що існує. Наприклад, там - це всі числа, знаки, булеві і т. д. Нормальні типи даних або складні типи даних - це все інше. String - це масив символів, тому складний тип даних.
Кожна створена вами змінна - це фактично вказівник на значення у вашій пам'яті. Наприклад:
String s = new String("This is just a test");
змінна "s" НЕ містить рядка. Це вказівник. Цей вказівник вказує на змінну у вашій пам'яті. Коли ви телефонуєте System.out.println(anyObject), викликається toString()метод цього об'єкта. Якщо він не змінив значення toStringвід Object, він надрукує покажчик. Наприклад:
public class Foo{
public static void main(String[] args) {
Foo f = new Foo();
System.out.println(f);
}
}
>>>>
>>>>
>>>>Foo@330bedb4
Все за "@" - це вказівник. Це працює лише для складних типів даних. Примітивні типи даних Прямо зберігаються у своєму покажчику. Так що фактично немає вказівника, і значення зберігаються безпосередньо.
Наприклад:
int i = 123;
Я НЕ зберігає вказівник у цьому випадку. я збережу ціле значення 123 (у байтах ofc).
Гаразд, давайте повернемося до ==оператора. Він завжди порівнює вказівник, а не вміст, збережений на місці вказівника в пам'яті.
Приклад:
String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2);
>>>>> false
Ці обидва рядки мають інший вказівник. String.equals (String other), однак, порівнює вміст. Можна порівняти примітивні типи даних з оператором '==', оскільки вказівник двох різних об'єктів з однаковим вмістом є рівним.
Null означатиме, що вказівник порожній. Порожній примітивний тип даних за замовчуванням дорівнює 0 (для чисел). Нуль для будь-якого складного об'єкта, однак, означає, що цей об'єкт не існує.
Привітання
nullне має жодних методів, так само і ніequals(). Якби виmyStringбулиnull, як ви коли-небудь посилаєтесь на метод? :)