Java имеет пул строк, в котором Java управляет распределением памяти для объектов String. См. String Pools в Java
Когда вы проверяете (сравниваете) два объекта с помощью оператора ==
, он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые адреса, то он возвращает true
, в противном случае false
. Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals
.
equals
- фактически метод класса Object, но он переопределяется в класс String и дается новое определение, которое сравнивает содержимое объекта.
Example:
stringObjectOne.equals(stringObjectTwo);
Но помните, что это относится к случаю String. Если вы хотите сравнить регистр без учета регистра, вы должны пойти для метода equalsIgnoreCase класса String.
Давайте посмотрим:
String one = "HELLO";
String two = "HELLO";
String three = new String("HELLO");
String four = "hello";
one == two; // TRUE
one == three; // FALSE
one == four; // FALSE
one.equals(two); // TRUE
one.equals(three); // TRUE
one.equals(four); // FALSE
one.equalsIgnoreCase(four); // TRUE
Я не уверен, что понимаю, но позвольте мне попробовать. Если у вас есть JSON следующим образом:
* def json = { foo: 'bar', baz: 'ban' }
Вы можете использовать маркер #present
следующим образом:
* match json == { foo: '#present', baz: '#present' }
Теперь, похоже, вы хотите динамически определять которые вы хотите:
* def keys = ['foo', 'baz']
Вы можете легко программно создать необходимый шаблон:
* def template = {}
* eval karate.forEach(keys, function(k){ template[k] = '#present' })
* match json == template
Надеюсь, что это поможет! Обратите внимание, что karate.forEach()
является новым в 0.8.0 - и вы можете использовать 0.8.0.RC9 в среднем.
Если вы ссылаетесь на эти примеры, вы можете получить больше идей: https : //github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/search/search-complex.feature#L27
* match response.Clinics == '#present'
в качестве альтернативы, что предпочитают некоторые люди. – Peter Thomas 13 July 2018 в 12:52