Оператор вызова непустого метода работает, почему?

Я понимаю основную концепцию методов в Java. Вы вызываете его, его код выполняется, и он возвращает значение.

Метод length() объекта String (скажем, str) возвращает значение int, поэтому мы называем его так: int x = str.length();, for(int i = 0; i < str.length(); i++) и т. д.

Методы substring(int) и substring(int, int) (также из класса String) возвращают значение String, которое мы используем как String s = str.substring(3, 5);, String removed = str.substring(0, i)+str.substring(i+1); и т. д.

Все эти примеры являются действительными операторами в Java.

Однако это не 5; или "Hello there!";, или '@';, или add(2, 3);, где add() возвращает значение типа int.

Это довольно просто. Но моя проблема заключается в следующем: str.length();, str.charAt(0); и почти все методы String при прямом вызове являются допустимыми операторами, даже если у них нет void в качестве возвращаемого типа.

Даже объект Scanner может вызывать методы напрямую, как scannerObject.nextLine();, и является допустимым заявлением.

Так почему? Почему 5; недействителен, а str.length() действителен, хотя он также может быть эквивалентом 5;? Что составляет оператор в Java, почему локальные методы недопустимы и почему разрешены вызовы объектных методов, даже если они работают одинаково и возвращают одно и то же?

Я попытался найти похожие вопросы, но в моем вопросе недостаточно ключевых слов для правильного поиска чего-то похожего.

Robo Mop 22.03.2018 05:27

@shmosel Я проверю. Спасибо.

Robo Mop 22.03.2018 05:30

@shmosel Я проверил вашу ссылку, но она действительно не предлагает подробного объяснения вопроса мой. Он просто говорит мне, что операторы вызова методов разрешены, но не почему, и не имеет отношения к моему вопросу.

Robo Mop 22.03.2018 05:32

На какую часть вашего вопроса не ответили?

shmosel 22.03.2018 05:33
add(2, 3) не работает? Пробовал только сейчас, работает.
Wreigh 22.03.2018 05:36
5 - это литерал, и сам по себе литерал не является допустимым выражением в java.
Wreigh 22.03.2018 05:37

@Prashant Тем не менее, я прочитал необходимую часть по теме.

Robo Mop 22.03.2018 05:38

@SotiriosDelimanolis Спасибо за ответ!

Robo Mop 22.03.2018 05:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
9
39
0

Другие вопросы по теме