Вызов методов для строковых литералов (Java) - PullRequest
13 голосов
/ 07 мая 2019

Я знаю, что строковые литералы являются объектами. Согласно

https://en.wikibooks.org/wiki/Java_Programming/Classes,_Objects_and_Types

Когда объект создается, ссылка на объект также создается. Объект не может быть доступен напрямую в Java, только через эту ссылку на объект. Этой ссылке на объект назначен тип. Этот тип нам нужен при передаче ссылки на объект в метод в качестве параметра.

Но нарушаем ли мы это, когда у нас есть литералы доступа к методам String?

Например:

System.out.println("Literal".toUpperCase());

Разве это не прямой доступ к объекту? в отличие от доступа к объекту по ссылке.

Например:

String x = "Literal"; 
System.out.println(x.toUpperCase());

1 Ответ

20 голосов
/ 07 мая 2019

Разве это не прямой доступ к объекту? в отличие от доступа к объекту по ссылке.

Нет, вы все еще используете ссылку. Значением выражения, которое является строковым литералом, является строковая ссылка. Это все еще не тот объект, к которому вы обращаетесь напрямую.

В вашем примере значение x все еще является ссылкой, и ваши два фрагмента эквивалентны, за исключением наличия переменной x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...