Pinakin Parkhe Ответов: 1

Хейя, как я только что узнал, java поддерживает только передачу по значению... Затем...


class Printer { 
public void print(Paper p){
p.setText("Get Lost!");
}
}
class Paper {
String text;
public void setText(String t){
text = t;
}
public String getText()	{
return text;
} }
public class Prog21 {
public static void main(String[] args) 	{
Paper p = new Paper();
p.setText("Hello World!");
System.out.println(p.getText());
Printer hp = new Printer();
hp.print(p);
System.out.println(p.getText());
} }


Что я уже пробовал:

чего я здесь не понимаю, так это как изменяется значение p? В pass by value должна быть изменена только копия p, верно? могу ли я получить ответ в контексте call-by-value, пожалуйста?

1 Ответов

Рейтинг:
5

Thomas Daniels

Даже если Java является pass-by-value, это не означает, что копия p производится и модифицируется. Это ссылка на объект p это передается по значению.

Вот статья, которая объясняет pass-by-value Java (включая примеры того, что я только что сказал): Java-это Pass-by-Value, черт возьми! - Скотт Стенчфилд[^]

Особенно эта цитата проясняет точную путаницу, которая у вас есть:

Цитата:
Проблема, с которой мы здесь сталкиваемся, заключается в таких утверждениях, как

В Java объекты передаются по ссылке, а примитивы-по значению.

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

Однако, Объекты не передаются по ссылке Правильным утверждением было бы Ссылки на объекты передаются по значению.


CPallini

5.

Thomas Daniels

Спасибо.

Afzaal Ahmad Zeeshan

5ед. Хорошее значение в ссылке, которую вы только что передали. :-)

Thomas Daniels

Спасибо

Pinakin Parkhe

Спасибо.. @Cpallini