Хорошо это, как типы данных работы в Java. (Вы должны извинить мой английский, я не могу использовать правильный vocab. Вы должны различать два из них: базовые типы данных и обычные типы данных. Базовые типы данных в значительной степени составляют все существующее. Например , есть все числа, голец, логические и т.д. нормальные типы данных или сложные типы данных, все остальное. Строка представляет собой массив символов, поэтому сложный тип данных.
Каждая переменная, которую вы создаете на самом деле указатель на значение в вашей памяти Например:.
String s = new String("This is just a test");
вар iable "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);
}
}
>>>>
>>>>
>>>>[email protected]
Все позади "@" является указателем. Это работает только для сложных типов данных. Примитивные типы данных DIRECTLY сохраняются в указателе. Так что на самом деле нет указателя, и значения хранятся напрямую.
Например:
int i = 123;
я не хранит указатель в этом случае. i будет хранить целочисленное значение 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 для любого сложного объекта означает, что объект не существует.
Приветствия
'null' не имеет методов, поэтому также не' equals() '. Если 'myString' были' null', как бы вы когда-либо вызывали метод на нем? :) – BalusC
Могу ли я предложить вам 'System.out.println (myString)' непосредственно перед if-блоком, чтобы вы могли видеть, что там? –
Откуда вы знаете, что «оно равно« null »? –