Оператор ==
проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals()
проверьте фактическое содержимое строки (значение).
Обратите внимание, что метод .equals()
принадлежит классу Object
(суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.
String s1 = "Stack Overflow";
String s2 = "Stack Overflow";
s1 == s2; //true
s1.equals(s2); //true
Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле. String s1 = new String("Stack Overflow");
String s2 = new String("Stack Overflow");
s1 == s2; //false
s1.equals(s2); //true
Причина. Если вы создаете объект String с использованием ключевого слова new
, ему выделяется отдельное пространство в куче. Как насчет этого:
$Beeblebrox->{'2ndhead'}
На самом деле вы можете сделать это практически для любой переменной - даже для тех, которые не являются свойствами класса.
Например , вы могли бы подумать о имени переменной, которое содержит пробелы; следующий синтаксис будет работать:
${"My test var"} = 10;
echo ${"My test var"};
Даже если, очевидно, вы не сможете сделать ничего подобного:
$My test var = 10;
echo $My test var;
Не знаю, как он работает внутри, хотя ... И после небольшого поиска я ничего не могу найти в руководстве по PHP.
Здесь можно найти только что {}
и переменные: Переменный синтаксический анализ - но не совсем связано с текущим объектом ...
Но вот статья, которая показывает пару других возможностей, и идет дальше, чем примеры, которые я написал здесь: Имена переменных PHP : Curly Brace Madness
И вот еще один, который дает некоторую дополнительную информацию о том, как они анализируются: PHP грамматические заметки
Я действительно узнал ответ от коллеги, прежде чем я спросил об этом, но не смог найти его в Google, поэтому я хотел опубликовать его здесь, если у других такая же проблема.
Я могу получите доступ к этому атрибуту следующим образом:
$Beeblebrox->{'2ndhead'}
Неправдоподобно иметь атрибут или переменную, которая начинается с числа, но так или иначе такая динамическая ссылка, как это делает возможным. Кажется, это странная лазейка для меня.