А>так int — это не объект, а примитв. А>Если посморишь на метоты Integer-а, то поймешь в чем прикол.
Ну в данном та случае вопрос стоит как получить int, неужели нельзя так делать??
Re[3]: передача параметра "по ссылке"
От:
Аноним
Дата:
21.12.06 07:57
Оценка:
When Java passes an argument into a method call, a copy of the argument is actually passed.
Consider the following code fragment:
The variable radians contains a pattern of bits that represents the number 1.2345. On line 2,
a copy of this bit pattern is passed into the method-calling apparatus of the JVM.
When an argument is passed into a method, changes to the argument value by the method
do not affect the original data. Consider the following method:
public void bumper(int bumpMe) {
bumpMe += 15;
}
Line 2 modifies a copy of the parameter passed by the caller. For example
int xx = 12345;
bumper(xx);
System.out.println(“Now xx is “ + xx);
On line 2, the caller’s xx variable is copied; the copy is passed into the bumper() method and
incremented by 15. Because the original xx is untouched, line 3 will report that xx is still
12345.
This is also true when the argument to be passed is an object rather than a primitive. However,
it is crucial for you to understand that the effect is very different. In order to understand
the process, you have to understand the concept of the object reference.
Java programs do not deal directly with objects. When an object is constructed, the constructor
returns a value—a bit pattern—that uniquely identifies the object. This value is known as a
reference to the object. For example, consider the following code:
1. Button btn;
2. btn = new Button("Ok");
In line 2, the Button constructor returns a reference to the just-constructed button—not the
actual button object or a copy of the button object. This reference is stored in the variable btn.
In some implementations of the JVM, a reference is simply the address of the object; however,
the JVM specification gives wide latitude as to how references can be implemented. You can
think of a reference as simply a pattern of bits that uniquely identifies an individual object.
_>class New
_>{
_> public static void change(int n)
_> {
_> n = 5;
_> }
_> public static void main(String[]args)
_> {
_> int n = 0;
_> change(n);
_> System.out.print(n);
_> }
_>}
_>
Даже если бы этот код, работал так, как вы хотите — в чем его философский смысл?
Только вчера знакомый сетовал, что "в Java примитивные типы нельзя передать по ссылке". Мы посмотрели его пример. В объекте был метод, выполняющий некоторое вычисление, результат которого — два коэффициента, которые он пытался по старой привычке передать наружу по ссылке.
В итоге... я спросил его:
1) Почему, раз метод не обращается ни к каким членам объекта, он не объявлен как статичный?
2) Если кроме этого метода (по сути статичного) в классе ничего нет, зачем этот класс?
Пришли к выводу, что он пытается писать на ООП-языке процедурно. На самом деле нестатичный метод объекта должен обрабатывать некоторое внутреннее состояние объекта, которое характеризуется полями класса. То есть его коэффициенты должны быть полями класса, которые метод после вычисления должен инициализировать.
Здравствуйте, <Аноним>, Вы писали:
А>Обворачивай в объект и вперёд.
-1
Бред.
В ООП по определению метод должен осуществлять обработку самого объекта, а не передаваемого ему. То есть правильно в вашей терминологии сказать: "Оборачивай в объект New" — то есть делай n — полем класса New, который содержит метод change.
В данном же контексте метод (method) определяется как процедура или функция, которая изменяет состояние объекта или заставляет объект отправить сообщение.
А> Или ретурнь результат. Это уж от как красифше по задаче будет )
+1
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[7]: передача параметра "по ссылке"
От:
Аноним
Дата:
21.12.06 08:17
Оценка:
Здравствуйте, rsn81, Вы писали:
R>В ООП по определению метод должен осуществлять обработку самого объекта, а не передаваемого ему. То есть правильно в вашей терминологии сказать: "Оборачивай в объект New" — то есть делай n — полем класса New, который содержит метод change.
А он тебе сказал в чем его задача?
Может этот примитив и есть элемент состояния объекта класса, который он еще не создал?
Вобщем задачи бывают разные и не стоит так умничать не выяснив подробностей.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, dev_m, Вы писали:
_>>Ну в данном та случае вопрос стоит как получить int, неужели нельзя так делать??
А>Обворачивай в объект и вперёд. Или ретурнь результат. Это уж от как красифше по задаче будет )
Вы хотите сказать, что если сделать вот так
public class Test
{
public static void change(Integer n)
{
n = 5;
}
public static void main(String[] args)
{
Integer n = 0;
change(n);
System.out.print(n);
}
}
будет выводится "5"?
Re[5]: передача параметра "по ссылке"
От:
Аноним
Дата:
21.12.06 08:27
Оценка:
public class Test
{
public static void main(String[] args)
{
T t = new T();
System.out.println("s in main = " + t.s);
t.s = "2";
System.out.println("s in main = " + t.s);
}
}
class T
{
public String s = "1";
}
s in main = 1
s in main = 2
Гы. В классе String заметна защита от дураков = нет методов изменения самого объекта строки )
Здравствуйте, dev_m, Вы писали:
А>>так int — это не объект, а примитв. А>>Если посморишь на метоты Integer-а, то поймешь в чем прикол. _>Ну в данном та случае вопрос стоит как получить int, неужели нельзя так делать??
Здравствуйте, <Аноним>, Вы писали:
А>А он тебе сказал в чем его задача?
Да, у него был тупой с точки зрения ООП и сложный с точки зрения математики вычислитель. Посоветовал переписать его на Matlab, то есть процедурном (!) m-языке.
А>Может этот примитив и есть элемент состояния объекта класса, который он еще не создал?
Вы внимательно прочли процитированное? Метод должен обрабатывать внутренее состояние самого (!) объекта, содержащего данный метод (!).
А>Вобщем задачи бывают разные и не стоит так умничать не выяснив подробностей.
Пример такой задачи в подробностях?
Здравствуйте, fellow.sufferer, Вы писали:
FS>Здравствуйте, msqrt84, Вы писали:
M>>будет выводится "5"?
FS>1.5 портит людей. попробуй тож самое на 1.4 и узрей косяк.
У меня стоит 1.5 — выводится 0. Я так понимаю, в 1.4 выводится 5?