Хорошо, вот как типы данных работают в Java. (Вы должны извинить мой английский, я, вероятно, не использую правильный словарь. Вы должны различать два из них. Базовые типы данных и обычные типы данных. Базовые типы данных в значительной степени составляют все, что существует. Например, есть все числа, символы, логические значения и т. д. Обычные типы данных или сложные типы данных - это все остальное. Строка - это массив символов, поэтому сложный тип данных.
Каждая переменная, которую вы создаете, на самом деле является указателем на значение в вашей памяти. Например:
String s = new String("This is just a test");
переменная "s" НЕ содержит строку. Это указатель. Этот указатель указывает на переменную в вашей памяти. При вызове System.out.println(anyObject), то toString()метод этого объекта называется. Если он не переопределил toStringобъект, он напечатает указатель. Например:
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) однако сравнивает содержимое. Вы можете сравнивать примитивные типы данных с оператором '==', поскольку указатель двух разных объектов с одинаковым содержимым одинаков.
Ноль будет означать, что указатель пуст. Пустой примитивный тип данных по умолчанию равен 0 (для чисел). Null для любого сложного объекта, однако, означает, что этот объект не существует.
Приветствую
nullнет никаких методов, так что нетequals(). Если бы выmyStringбылиnull, как бы вы вызвали метод для этого? :)