В куче создается новый объект String.
В пуле строк (String Pool) ищется строка "asd".
Если строка "asd" отсутствует в пуле, она добавляется туда.
Объекту s1 присваивается ссылка на новый объект String в куче, а не на объект в пуле строк.
Сравнение с String s2 = "asd":
String s1 = new String("asd"): Создается два объекта (один в куче, один в пуле строк), s1 ссылается на объект в куче.String s2 = "asd": Создается максимум один объект (в пуле строк), s2 ссылается на объект в пуле строк (или использует существующий, если он уже там есть).Пример:
java