Если у нас код:
return number;
Тогда в том месте, где мы вызвали метод, будет название переменной number, или её значение? То есть return возвращает именно значение переменной, или название переменной?
То же самое с массивом:
return arrayName;
В месте вызова метода вернётся название переменной-массива arrayName, или значение, которое содержится в arrayName?
Айхан
13 уровень
Что возвращает return?
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ГоффMaster
29 января 2023, 18:07полезный
1. Возвращает значение. Имя переменной, как и сама переменная, пределы метода не покидает.
2. Аррэй - это объект и переменная содержит не сам аррэй, а ссылку на него. Ссылочный тип переменной. return arrayName; тоже возвращает значение, при это надо понмнить что её значение - это ссылка на массив, а не сам массив. С этим поначалу у многих путаница, но со временем въезжают все.
+2
Айхан
29 января 2023, 21:46
1. Если у меня метод возвращает значение типа int[], значит надо вернуть ссылку на массив целых чисел?
2. Если я пишу return для переменной типа массив целых чисел, то у меня вернётся ссылка на массив и эта ссылка будет типа int[]? Я не совсем понимаю, какой тип может быть у возвращаемой ссылки. Тип вроде бывает у объектов, а ссылки сами по себе типа не имеют. Или при возвращении смотрится не на тип ссылки, а на тип объекта, на который ведёт эта ссылка? Как это понимать?
0
ГоффMaster
29 января 2023, 22:47решение
Мне кажется что ты ещё не въехал в разницу между примитивом и ссылочной переменной. Попробую раскатать на пальцах:
Примитивная переменная хранит именно значение, например по команде int x = 3; выделяется участок памяти, достаточный для переменной типа int, этот участок памяти ассоциируется с названием переменной и в этот участок памяти записывается число 3. Для простоты мы можем сказать, что в переменную x записано значение 3.
Не так со ссылочными переменными. По команде int[] array = {1, 2, 3}; выделяется участок памяти, достаточный для объекта типа int[3] и адрес первого блока памяти этого участка записывается в переменную x. Этот адрес и есть ссылка на объект. То-есть в переменную не сам массив записывается, а только адрес первого блока массива.
1. Когда ты пишешь return array, то ты возвращаешь ссылку - адрес участка памяти, где находится этот самый аррэй. Тип в return должен соответствовать объявленному в сигнатуре метода типу.
2. Да, с поправкой - ссылка сама по себе типа не имеет, ссылка на аррэй int[] ничем не отличается от ссылки на объект типа String - и то, и то, это однотипные адреса памяти. Но сама переменная это не только ёмкость для хранения чего-то, у неё ещё есть характеристика, её свойство, её тип. Естественно, эта характеристика, в случае с ссылочными переменными должна соответствовать типу объекта, на который ссылается. Тип есть и у ссылочной переменной, и у объекта.
Если у тебя метод public int[] method() {} с возвратом return array;, а в мейне int k = method(); то возникнет ошибка компиляции - тип возвращаемой информации (int[]) не соответствует типу переменной k.
Тип того, что возвращает return должен соответствовать объявленному в сигнатуре метода типу самого метода, а объявленный в сигнатуре метода тип должен соответствовать типу принимаемой переменной.
+2
Айхан
29 января 2023, 23:39
Обожаю тебя, уже не первый раз помогаешь мне, объясняя вопрос и ещё пару смежных тем. Держи корону 👑
0
ГоффMaster
30 января 2023, 00:15
Спасибо :-D
0
Айхан
3 февраля 2023, 07:55
Почему при System.out.println() для строчной переменной мы выводим на экран не ссылку, а сам текст?
Почему при System.out.println() для переменной типа массив мы выводим на экран ссылку, а не массив?
0
ГоффMaster
3 февраля 2023, 21:24полезный
Когда ты что-то выводишь System.out.println(), то, к тому, что ты выводишь, автоматически вызывается метод toString(), потому что на консоль можно вывести только строку. Консоль в принципе ничего другого вывести не может - кстати, и в обратную сторону это тоже работает, с консоли можно ввести только строку. Другое дело, что строка под капотом парсится в число, когда ты считываешь число, но с консоли считывается именно строка, последовательность символов.
Так вот, у каждого класса джавы есть метод toString(), в котором определяется, как объект этого класса отображается строкой. В каком-то случае это адрес ссылки, для других классов, например, String, это может быть значение.
Метод toString() можно переопределять, если нужно, что бы объект того или иного класса выводился иначе, чем это предусмотрено.
Когда создаёшь свой класс, то можешь там расписать и свой метод toString(), очень бывает полезно.
На эту тему (метод toString()) ещё будут задания.
+1
Anonymous #3048408
29 января 2023, 17:46полезный
return возвращает значение переменной. Если у вас тип вашей переменной number - int, и например она равна 32, то:
public int getNumber() {
int number = 32;
return number;
}
данный код, для примера вернёт 32
Если у вас переменная типа String, как скорее всего ваша,
String arrayName = "azaza";
то вернётся её значение, в данном примере "azaza", а не "arrayName"
+1