Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2010, 01:50   #1
grimm_jow
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 25
Вопрос equals!!!

Вопрос следующий, есть 2 одинаковые строки, почему equals говорит что они разные ?! чем еще можно сравнить 2 массива симмволов ?


Код:
public class tmptmp {

	
	public static void main(String[] args) {
		
		char t1[] = {'X','X','X'};
		char t2[] = {'X','X','X'};
		
		if (t1.equals(t2)){                /// ВТФ ?!?
			System.out.println("ravno");
		}
		else{
			
			System.out.println("ne ravno");
			
		}

	}

}

Последний раз редактировалось alexinspir; 13.06.2010 в 09:04.
grimm_jow вне форума Ответить с цитированием
Старый 13.06.2010, 02:29   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Вот сравнение строк:

Код:
		String str1, str2;
		
		str1 = "abc";
		str2 = "abc";
		
		if(str1.equals(str2))
			System.out.println("YES!");
		else
			System.out.println("NO!");
Функция equals принимает параметр типа Object. Object это класс от которого наследуются по умолчанию все классы в Java. Тип char не относится к классам, а String - это класс для работы со строками. Можно сделать еще так:
Код:
		char t1[] = {'X','X','X'};
		char t2[] = {'X','X','X'};
		
		String str1 = new String(t1);
		String str2 = new String(t2);

		if (str1.equals(str2))
			System.out.println("ravno");
		else
			System.out.println("ne ravno");

Последний раз редактировалось profi; 13.06.2010 в 02:46.
profi вне форума Ответить с цитированием
Старый 13.06.2010, 08:40   #3
Pliks
Пользователь
 
Регистрация: 20.11.2009
Сообщений: 46
По умолчанию

char - это примитивный тип данных в джава.
Вот Char - это уже объект помоему.
Runtime.getRuntime().gc() ява - один из самых чистых языков.
Pliks вне форума Ответить с цитированием
Старый 13.06.2010, 09:15   #4
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от grimm_jow Посмотреть сообщение
Вопрос следующий, есть 2 одинаковые строки, почему equals говорит что они разные ?!
Как уже сказал profi, вы сравниваете не строки, а массивы. На сколько я могу помнить с сертификации, любой массив является потомком Object, и при этом не переопределяет ни один из его методов, в следствии этого, используя equals к массивам, вы просто проверяете идентичность ссылок.
Код:
    public boolean equals(Object obj) {
	return (this == obj);
    }
Цитата:
Сообщение от grimm_jow Посмотреть сообщение
чем еще можно сравнить 2 массива симмволов ?
использовать Arrays.equals(char[] a, char[] a2);
Цитата:
Тип char не относится к классам
Добавлю, что с момента внедрения автобоксинга, имеется возможность оперировать экземплярами типа char, int, float etc как не примитивными типами. например, их можно без ошибок компиляции передать в метод equals(), который принимает аргумент типа Object.
Цитата:
Вот Char - это уже объект помоему.
Класса Char в Джаве нет, есть Character.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.

Последний раз редактировалось alexinspir; 13.06.2010 в 09:17.
alexinspir вне форума Ответить с цитированием
Старый 13.06.2010, 09:22   #5
Pliks
Пользователь
 
Регистрация: 20.11.2009
Сообщений: 46
По умолчанию

Ну да, именно так.
Runtime.getRuntime().gc() ява - один из самых чистых языков.
Pliks вне форума Ответить с цитированием
Старый 13.06.2010, 13:45   #6
grimm_jow
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 25
По умолчанию

всем спасибо, очень толковое объяснение
grimm_jow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц