Apex и case sensitive

Весьма забаное поведение apex в тестах
String x = ‘Abc’;
String y = ‘abc’;
System.assert(x == y); // passes
System.assertEquals(x, y); // fails

Аналогичное поведение с полем email. Записать значение в поле ты можешь в любом регистре, но при SOQL запросе, регистр неучитывается.

1 Вподобання

Добрый день.

Дело в том, что оператор “==” case-insensitive для класса String изначально (см. Equality operator).
Таким образом, запись “System.assert(x == y);” аналогична “system.assert(x.equalsIgnoreCase(y));”.

Сравнение строк в SOQL запросе case-insensitive по умолчанию, кроме полей, для которых явно указано, что они Unique и case sensitive.

2 Вподобання
String q = 'teXt';
system.debug('teXt'.equals(q)); // true
system.debug('text'.equals(q)); // false
system.debug('teXt' == q);      // true
system.debug('text' == q);      // true

если использовать equals для String, то сравнивается binary sequence of characters as the current string, а == действительно case-insensitive

2 Вподобання