powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / почему выражение не становится true
11 сообщений из 11, страница 1 из 1
почему выражение не становится true
    #39928713
Romantiktj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый уважаемые знатоки,

Код: 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
почему выражение не становится true
    #39928718
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
if(subject.getNumber().equals(previous) )


Через == ты сравниваешь ссылки.
...
Рейтинг: 0 / 0
почему выражение не становится true
    #39928728
Romantiktj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Большое Огромное спасибо!!!! Вы мне нервы спасли!!!!
...
Рейтинг: 0 / 0
почему выражение не становится true
    #39929641
iJava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Romantiktj,можешь положить эти переменные в пул и будет давать true
добавь .intern()
...
Рейтинг: 0 / 0
почему выражение не становится true
    #39929643
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iJava
добавь .intern()
Не надо швыряться вредными советами.
...
Рейтинг: 0 / 0
почему выражение не становится true
    #39929728
iJava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
почему выражение не становится true
    #39929742
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iJava,

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

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

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

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



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

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

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


Сам-то с передачей объектов по ссылке/по значению разобрался?
...
Рейтинг: 0 / 0
почему выражение не становится true
    #39969825
Ankit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / почему выражение не становится true
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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