Если метод equals()
присутствует в классе java.lang.Object
, и ожидается, что он проверяет эквивалентность состояния объектов! Это означает, что содержимое объектов. В то время как ожидается, что оператор ==
проверяет, что фактические экземпляры объекта одинаковы или нет.
Пример
Рассмотрим две различные ссылочные переменные, str1
и str2
:
str1 = new String("abc");
str2 = new String("abc");
Если вы используете equals()
System.out.println((str1.equals(str2))?"TRUE":"FALSE");
, вы получите выход как TRUE
, если вы используете ==
.
System.out.println((str1==str2) ? "TRUE" : "FALSE");
Теперь вы получите вывод FALSE
в качестве вывода, потому что оба str1
и str2
указывают на два разных объекта, хотя оба они имеют одинаковое строковое содержимое. Именно из-за new String()
каждый новый объект создается каждый раз.
Вы можете искать обсуждение из ?make.names
:
Синтаксически действительное имя состоит из букв, цифр и символов точки или подчеркивания и начинается с буквы или точки, не последовавшей числом. Имена, такие как «.2way», недействительны и не являются зарезервированными словами.
blockquote>В самом файле справки имеется ссылка на список зарезервированных слов, которые:
, если else повторяется, пока функция для следующего разрыва
TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character _
blockquote>Многие другие хорошие заметки из комментарии включают точку Джеймса в R FAQ , рассматривающую эту проблему, и указатель Джоша на связанный SO вопрос , посвященный проверке синтаксически допустимых имен.
Почти ничего! Вы можете использовать «assign» для создания смешных имен переменных:
assign("1",99)
ls()
# [1] "1"
Да, это переменная с именем «1». Цифра 1. К счастью, это не меняет значение целого числа 1, и вам нужно немного усердно работать, чтобы получить его значение:
1
# [1] 1
get("1")
# [1] 99
. Синтаксические ограничения, о которых могут упомянуть некоторые люди, парсер. По сути, очень мало вы не можете назвать R-объектом. Вы просто не можете сделать это с помощью оператора присваивания «& lt; -». «get» освободит вас:)
?name
, «Имена ограничены 10 000 байтами (и до 256 байт в версиях R до 2.13.0)», поэтому для вас существует хотя бы один предел!
– Josh O'Brien
8 February 2012 в 17:12
Использование функции make.names () из встроенного базового пакета может помочь:
is_valid_name<- function(x)
{
length_condition = if(getRversion() < "2.13.0") 256L else 10000L
is_short_enough = nchar(x) <= length_condition
is_valid_name = (make.names(x) == x)
final_condition = is_short_enough && is_valid_name
return(final_condition)
}
Невозможно напрямую обратиться к вашему вопросу, но он очень помогает. Попробуйте команду exists()
, чтобы узнать, существует ли что-то, и вы знаете, что вы не должны использовать системные имена для своих переменных или функций. Пример ...
> exists('for')
[1] TRUE
>exists('myvariable')
[1] FALSE
. = 3; print(.)
– Aaron McDaid 17 September 2014 в 15:17