Я понимаю основную концепцию методов в 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, почему локальные методы недопустимы и почему разрешены вызовы объектных методов, даже если они работают одинаково и возвращают одно и то же?
@shmosel Я проверю. Спасибо.
@shmosel Я проверил вашу ссылку, но она действительно не предлагает подробного объяснения вопроса мой. Он просто говорит мне, что операторы вызова методов разрешены, но не почему, и не имеет отношения к моему вопросу.
На какую часть вашего вопроса не ответили?
add(2, 3) не работает? Пробовал только сейчас, работает.
5 - это литерал, и сам по себе литерал не является допустимым выражением в java.
@Prashant Тем не менее, я прочитал необходимую часть по теме.
@SotiriosDelimanolis Спасибо за ответ!




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