Интервьюер спрашивает
A = String "ABC",
строка B = новый новый String ( "ABC"),
эти два значения, A, B равны, если все идут внутри с HashSet, вы можете положить вниз?
A:
Анализ (а) A == B является ложным,
(B) a.equals (B) верно, так как равноценные, должны вписываться в HashSet, только положить
Строка = «ABC», то память будет искать постоянное поколение (постоянный пул), если нет, то вместе в открытом пространстве в памяти постоянного поколения, адрес указателя стека заплатил, если у вас уже есть «ABC» из памяти, непосредственно присвоить адрес указателя стека, поэтому
строка str1 = "AA",
Srting str2 = "AA";
Строка str3 = "AA";
....
идти дальше, str1 == str2 == str3, был бы равен ему, (а) == определение, (б) определение равно (); равно, равно из - за их адреса, и поэтому только имеет постоянный пул пространства памяти, решать все равно,
и строку строки = новая строка ( " а «), это» а «конфигурация строки объекта объект String , снова, новый новый стек вместе в памяти, присвоить указатель на стек, он ссылается на новую конфигурацию объекта назначаются ул String. До тех пор , как новый String (), то стек адреса указывают на груду последнего нового адреса из
1 общественный класс Тест1 { 2 общественных статический недействительный основной (String [] арг) { 3 Строка s1 = новый String ( "Привет" ); 4 строки s2 = новый String ( "Привет" ); 5 System.out.println (s1 == s2); // ложные 6 System.out.println (s1.equals (с2)); // верно 7 8 Строка s3 = новый String ( "Привет" ); 9 Строка s4 = "Привет" ; 10 System.out.println (s3 == s4); // ложные 11 System.out.println (s3.equals (s4)); // истинный 12 13 Строка s5 = "привет" ; 14 Строка s6 = "Привет" ; 15 System.out.println (s5 == s6); // истинные 16 System.out.println (s5.equals (s6)); // истинно 17 } 18 19 }
Тест1 Подробного
s1 ~ s6 с использованием равных () меньше объяснения, значение всякого сравнения, является истинным. Следующее объяснение ==
s1, s2: из оба из которых являются новыми, каждое пространство , выделенное в куче , и назначить соответствующий адрес в памяти s1, s2. Различные адресное пространство, == сравнение ложно. Но каждый хранится на кучи космических значений один и те же адреса в струнном постоянном пуле объектов. Демонстрация фиги т.е. на понятном объяснении.
s3, s4 Demo пояснительная выше.
s5, s6 являются значениями в постоянном бассейне, оба из одной и той же точки объекта до постоянного пула, который является тем же значением адреса, результат верен
1 общественный класс Test2 { 2 общественных статический недействительный основной (String [] арг) { 3 строки s1 = "Привет" ; 4 строки s2 = "мир" ; 5 Строка s3 = "HelloWorld" ; 6 System.out.println (s3 == s1 + s2); // ложные 7 System.out.println (s3.equals ((S1 + S2))); // истинный 8 System.out.println (s3 == "привет" + "мир"); // истинные 9 System.out.println (s3.equals ( "привет" + "мир" )); //угрожают 10 } 11 }
Подробное Test2
равно (метод) не интерпретирует сравнение, значение сравнения, равны, являются истинными.
s1 и s2 суммируются в пространстве , чтобы открыть строку постоянный пул, то сплайсинг, то адресное пространство s1 и s2 после сплайсинга адреса. S3 с разными адресами, поэтому вывод является ложным.
s3 и «привет» + «мир» сравнение «привет» + «Мир» первый сшитый «HelloWorld», а затем пойти , чтобы найти , есть ли строка постоянная пул «HelloWorld», есть, и поэтому имеет строку s3 Объект, то верно.
Краткое описание
1, String з = новый String ( "привет") создает 2 (1) объект, String s = "привет" , чтобы создать 1 (0) объекты.
Примечание: Основана в скобках , когда есть строковая константа пула объектов привет!
2, если строковые переменные вместе, первое открытое пространство в сплайсинга.
3, если строка является постоянной суммой, это первое увеличение, а затем найти постоянный бассейн, если есть прямой возврат, в противном случае, он будет создан.