Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / почему выражение не становится true / 11 сообщений из 11, страница 1 из 1
20.02.2020, 06:51
    #39928713
Romantiktj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
День добрый уважаемые знатоки,

Код: java
1.
2.
   String previous="0";
 if(subject.getNumber()==previous )



При печати на консоль обе дают 0 но условие не срабатывает даже если прописываю

Код: java
1.
subject.getNumber().toString()



toString - становится серым, так как он уже строковой

даже

subject.getNumber()=="0" не срабатывает, хотя в консоли subject.getNumber() дает результат 0
...
Рейтинг: 0 / 0
20.02.2020, 07:35
    #39928718
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
Код: java
1.
if(subject.getNumber().equals(previous) )


Через == ты сравниваешь ссылки.
...
Рейтинг: 0 / 0
20.02.2020, 07:57
    #39928728
Romantiktj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
crutchmaster,
Большое Огромное спасибо!!!! Вы мне нервы спасли!!!!
...
Рейтинг: 0 / 0
21.02.2020, 19:41
    #39929641
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
Romantiktj,можешь положить эти переменные в пул и будет давать true
добавь .intern()
...
Рейтинг: 0 / 0
21.02.2020, 19:47
    #39929643
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
iJava
добавь .intern()
Не надо швыряться вредными советами.
...
Рейтинг: 0 / 0
22.02.2020, 11:33
    #39929728
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
Basil A. Sidorov
iJava
добавь .intern()
Не надо швыряться вредными советами.

Этот совет далеко не вредный, а даст понимание происходящего.
Вот набросал наглядный пример
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class Main {

    public static void main(String[] args) {
        Integer a=10;
        Integer b=10;
        Integer c=300;
        Integer d=300;
        isTrue(a,b);
        isTrue(c,d);
    }

    public  static <T> void isTrue(T i, T y) {
        System.out.println(i==y);
        System.out.println(i.equals(y));
    }
}
...
Рейтинг: 0 / 0
22.02.2020, 12:44
    #39929742
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
iJava,

это неявно и неочевидно, для пазлерсов сойдет. за юз такого в реальном продукте надо палкой бить. хочешь сравнивать объекты через равно - юзай скалу там == просто переопределен .equals-ом ))
...
Рейтинг: 0 / 0
23.02.2020, 22:59
    #39930077
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
andreykaT,
андрейка ты вопрос автора читал?
он не понимает как устроена память ,что такое пул
я дал ему наглядный пример- который даст минимальное понимание ситуации

это очень интересная тема и вот так с бухты барахты ее пройти не получится

но к сожалению к реальному программованию она никого отнощения не имеет)
я даже больше скажу -весь энтерпрайз - это уже по сути не джава программрование - а работа машиниста-наборщика)))
...
Рейтинг: 0 / 0
24.02.2020, 13:13
    #39930167
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
Вот всем еще в тему. Подумайте.

Код: java
1.
2.
3.
if (person instanceof Person) {
   ...
}



Код: java
1.
2.
3.
if (person.getClass() == Person.class) {
   ...
}
...
Рейтинг: 0 / 0
24.02.2020, 15:42
    #39930229
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
iJava
andreykaT,
андрейка ты вопрос автора читал?
он не понимает как устроена память ,что такое пул
я дал ему наглядный пример- который даст минимальное понимание ситуации

это очень интересная тема и вот так с бухты барахты ее пройти не получится

но к сожалению к реальному программованию она никого отнощения не имеет)
я даже больше скажу -весь энтерпрайз - это уже по сути не джава программрование - а работа машиниста-наборщика)))


Сам-то с передачей объектов по ссылке/по значению разобрался?
...
Рейтинг: 0 / 0
16.06.2020, 16:13
    #39969825
Ankit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему выражение не становится true
Romantiktj,

We need to understand 2 things here :-

1. In java every String created is an object. So if we create 2 different strings then they are allocated different memory locations(In few cases different strings will be given same memory location. Read about 'string pool' to understand this)
2. When we compare objects using '==' then memory address of objects is compared rather than the actual value.

So, when you write previous="0" and subject . getNumber () then both will have "0" value but there memory allocation will be different. As a result, on comparison it will return false.

If you want to compare 2 strings then always use below 'equals()' method:-

if ( previous.equals(subject . getNumber ()) == true)

The above statement will return true.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / почему выражение не становится true / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]