Вместо NULL я должен написать `0x0` или` 0`?

Если метод 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() каждый новый объект создается каждый раз.

13
задан Lightness Races in Orbit 13 December 2011 в 17:46
поделиться

8 ответов

Между прочим,

0x0 шестнадцатеричный, как вы все упомянули, но

0 восьмеричный, а не десятичный! : -)

т.е. любое число, начинающееся с 0 (без x) является восьмеричным:

0 = 0
01 = 1
02 = 2
...
07 = 7
010 = 8
011 = 9
012 = 10
...

: -)

6
ответ дан 1 December 2019 в 06:16
поделиться

Проще говоря, дело вкуса. Людям нравится записывать адреса памяти в шестнадцатеричном формате, поэтому запись NULL как 0x0 была бы более классической. Для обычных, как я, достаточно 0.

0
ответ дан 1 December 2019 в 06:16
поделиться

There is no difference. In C, NULL is often defined to be (void *)0, but in C++ that's not allowed. A few ancient compilers got this wrong, but they really are ancient.

IMO, it's better to use NULL, as it portrays the intent more clearly, and gives you a nice, easy symbol to S&R when your compiler gets updated to C++ 0x, which will include nullptr.

17
ответ дан 1 December 2019 в 06:16
поделиться

0x0 - это просто 0 , записанное в шестнадцатеричной системе счисления. Между ними нет разницы:

0 16 = 0 10 :)

NULL обычно #define d to 0 где-то и делает то же самое.

27
ответ дан 1 December 2019 в 06:16
поделиться

0x0 and 0 represent the same value, so you can use the one that best suits your eye. When we get C++0x, we'll have the keyword nullptr to represent null pointers of any type.

5
ответ дан 1 December 2019 в 06:16
поделиться

Никакой разницы

На мой взгляд, 0x0 более явный.

Некоторые люди могут спутать 0 с «0» (0x30 - я видел, как это было).

2
ответ дан 1 December 2019 в 06:16
поделиться

0x0 - это просто выражение значения 0 в шестнадцатеричном формате. Я сомневаюсь, что компилятор позаботится о разнице.

2
ответ дан 1 December 2019 в 06:16
поделиться

Итак, на этом сайте есть действительно хорошая информация о NULL: http://c-faq.com/null/index.html

NULL на самом деле является "нулевым указателем" "- так что это может быть тип, например," (void *) 0 ". Это сообщает компилятору, что NULL следует рассматривать не как int, а как «указатель на int». А в C компилятор выдает предупреждения / ошибки, если типы не совпадают.

Значения «0» и «0x0» эквивалентны в C ++. Всякий раз, когда перед числом стоит «0x», это означает, что это значение является шестнадцатеричным представлением этого числа. Например, 0x5 == 5.

Кроме того, 0xA [в шестнадцатеричной системе счисления, с основанием 16) == 10 [с основанием 10].

edit

Вот некоторые источники. В glibc NULL в разных местах определяется по-разному. (почему это должно быть?)

#define NULL ((void *) 0) (stdlib / gmp-impl.h)

#define NULL 0 (posix / getopt1.c)

edit2

ну, похоже, я промахнулся на этом! Извините! (CW'd. Не стесняйтесь голосовать против!)

-8
ответ дан 1 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: