Чем это отличается от следующего?
Эта строка кода здесь:
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
создает новый объект String (т.е. копию oldString
), в то время как эта строка кода:
String newString = oldString;
объявляет новую переменную типа java.lang.String
и инициализирует ее для ссылки на тот же объект String, что и переменная oldString
.
Есть ли сценарий, в котором две строки будут иметь разные выходные данные?
Абсолютно:
String newString = oldString;
boolean isSameInstance = newString == oldString; // isSameInstance == true
против
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
// isSameInstance == false (in most cases)
boolean isSameInstance = newString == oldString;
a_horse_with_no_name (смотрите комментарий) верно конечно.Эквивалент
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
равен
String newString = new String(oldString);
минус небольшая разница в кодировке, которую Питер Лоури объясняет в своем ответе.