Хорошо, вот как типы данных работают в Java. (Вы должны извинить мой английский, я, вероятно, не использую правильный словарный запас.
Вы должны различать два из них. Базовые типы данных и нормальные типы данных. Базовые типы данных в значительной степени составляют все, что существует.
Например, есть все числа, char, boolean и т. Д.
Обычные типы данных или сложные типы данных - это все остальное.
String - это массив символов, поэтому сложный тип данных.
Каждая переменная, которую вы создаете, фактически является указателем на значение в вашей памяти.
Например:
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).
Хорошо, давайте вернемся к оператору ==
.
Он всегда сравнивает указатель, а не содержимое, сохраненное на месте указателя в памяти.
* * Пример тысяча двадцать-один: * * 1 022
String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2);
>>>>> false
Обе строки имеют разные указатели. String.equals (String other), однако, сравнивает содержимое. Вы можете сравнивать примитивные типы данных с оператором '==', поскольку указатель двух разных объектов с одинаковым содержимым одинаков.
Ноль будет означать, что указатель пуст. Пустой примитивный тип данных по умолчанию равен 0 (для чисел). Однако для любого сложного объекта значение NULL означает, что этот объект не существует.
Привет