передача параметра "по ссылке"
От: dev_m  
Дата: 21.12.06 06:34
Оценка:
Как в java сделать так, чтобы измененный в функции параметр, вернулся в основную программу.
В сях:
void set(int&n);

, а как в jave?
Re: передача параметра "по ссылке"
От: Аноним  
Дата: 21.12.06 07:24
Оценка:
Здравствуйте, dev_m, Вы писали:

_>Как в java сделать так, чтобы измененный в функции параметр, вернулся в основную программу.

_>В сях:
_>
_>void set(int&n);
_>

_> , а как в jave?

Издеваешься? В жаве ВСЯ работа с объектами по ссыкам.
Re[2]: передача параметра "по ссылке"
От: dev_m  
Дата: 21.12.06 07:27
Оценка:
А>Издеваешься? В жаве ВСЯ работа с объектами по ссыкам.
Ну я честно не знаю.
Вот пишу и выводится 0:

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);
    }
}
Re[3]: передача параметра "по ссылке"
От: Аноним  
Дата: 21.12.06 07:30
Оценка:
Здравствуйте, dev_m, Вы писали:

_>
_>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);
_>    }
_>}
_>


так int — это не объект, а примитв.
Если посморишь на метоты Integer-а, то поймешь в чем прикол.
Re[2]: передача параметра "по ссылке"
От: Michael Ponomarev Россия  
Дата: 21.12.06 07:39
Оценка: 2 (2) +3
Hi, Аноним!

А> Издеваешься? В жаве ВСЯ работа с объектами по ссыкам.


Вся работа по значению.

WBR, Michael Ponomarev.
Posted via RSDN NNTP Server 2.0
Re[4]: передача параметра "по ссылке"
От: dev_m  
Дата: 21.12.06 07:54
Оценка:
А>так 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:

double radians = 1.2345;
System.out.println("Sine of " + radians + " = " + Math.sin(radians));


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.
Re[5]: передача параметра "по ссылке"
От: Аноним  
Дата: 21.12.06 08:02
Оценка: -1
Здравствуйте, dev_m, Вы писали:

_>Ну в данном та случае вопрос стоит как получить int, неужели нельзя так делать??


Обворачивай в объект и вперёд. Или ретурнь результат. Это уж от как красифше по задаче будет )
Re[3]: передача параметра "по ссылке"
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 21.12.06 08:02
Оценка:
Здравствуйте, dev_m, Вы писали:

_>
_>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) Если кроме этого метода (по сути статичного) в классе ничего нет, зачем этот класс?

Пришли к выводу, что он пытается писать на ООП-языке процедурно. На самом деле нестатичный метод объекта должен обрабатывать некоторое внутреннее состояние объекта, которое характеризуется полями класса. То есть его коэффициенты должны быть полями класса, которые метод после вычисления должен инициализировать.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[4]: передача параметра "по ссылке"
От: Michael Ponomarev Россия  
Дата: 21.12.06 08:07
Оценка:
Hi, Аноним!

public class ObjectTest {

public static void byValue(String s) {
String newS = new String("newS");
s = newS;
System.out.println("newS in byValue = " + newS);
System.out.println("s in byValue = " + s);
}
public static void main(String[] args) {
String s = "s";
System.out.println("s in main = " + s);
byValue(s);
System.out.println("s in main = " + s);
}
}


WBR, Michael Ponomarev.
Posted via RSDN NNTP Server 2.0
Re[6]: передача параметра "по ссылке"
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 21.12.06 08:10
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Обворачивай в объект и вперёд.

-1
Бред.

В ООП по определению метод должен осуществлять обработку самого объекта, а не передаваемого ему. То есть правильно в вашей терминологии сказать: "Оборачивай в объект New" — то есть делай n — полем класса New, который содержит метод change.

Не верите мне, читайте Глава из книги “ Объектно-ориентированные методы. Принципы и практика”
Автор(ы): Иан Грэхем
Дата: 10.11.2006
Глава из книги "Объектно-ориентированные методы. Принципы и практика".

Материал предоставлен издательством Вильямс.
:

В данном же контексте метод (method) определяется как процедура или функция, которая изменяет состояние объекта или заставляет объект отправить сообщение.


А> Или ретурнь результат. Это уж от как красифше по задаче будет )

+1
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[7]: передача параметра "по ссылке"
От: Аноним  
Дата: 21.12.06 08:17
Оценка:
Здравствуйте, rsn81, Вы писали:

R>В ООП по определению метод должен осуществлять обработку самого объекта, а не передаваемого ему. То есть правильно в вашей терминологии сказать: "Оборачивай в объект New" — то есть делай n — полем класса New, который содержит метод change.


А он тебе сказал в чем его задача?
Может этот примитив и есть элемент состояния объекта класса, который он еще не создал?
Вобщем задачи бывают разные и не стоит так умничать не выяснив подробностей.
Re[6]: передача параметра "по ссылке"
От: msqrt84 Россия  
Дата: 21.12.06 08:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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 заметна защита от дураков = нет методов изменения самого объекта строки )
Re[5]: передача параметра "по ссылке"
От: SmaLL75 Россия http://smallweb.narod.ru
Дата: 21.12.06 08:27
Оценка:
Здравствуйте, dev_m, Вы писали:

А>>так int — это не объект, а примитв.

А>>Если посморишь на метоты Integer-а, то поймешь в чем прикол.
_>Ну в данном та случае вопрос стоит как получить int, неужели нельзя так делать??

Java не C !!! Смирись либо умри!
Что ни делается, всЁ к лучшему
Re[8]: передача параметра "по ссылке"
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 21.12.06 08:28
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А он тебе сказал в чем его задача?

Да, у него был тупой с точки зрения ООП и сложный с точки зрения математики вычислитель. Посоветовал переписать его на Matlab, то есть процедурном (!) m-языке.

А>Может этот примитив и есть элемент состояния объекта класса, который он еще не создал?

Вы внимательно прочли процитированное? Метод должен обрабатывать внутренее состояние самого (!) объекта, содержащего данный метод (!).

А>Вобщем задачи бывают разные и не стоит так умничать не выяснив подробностей.

Пример такой задачи в подробностях?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[7]: передача параметра "по ссылке"
От: fellow.sufferer Россия  
Дата: 21.12.06 08:30
Оценка: 3 (1) +2
Здравствуйте, msqrt84, Вы писали:

M>будет выводится "5"?


1.5 портит людей. попробуй тож самое на 1.4 и узрей косяк.
Re[6]: передача параметра "по ссылке"
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 21.12.06 08:30
Оценка:
Здравствуйте, SmaLL75, Вы писали:

SLL>Java не C !!! Смирись либо умри!

И не C#, кстати — там такой бред тоже возможен.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[8]: передача параметра "по ссылке"
От: msqrt84 Россия  
Дата: 21.12.06 08:34
Оценка:
Здравствуйте, fellow.sufferer, Вы писали:

FS>Здравствуйте, msqrt84, Вы писали:


M>>будет выводится "5"?


FS>1.5 портит людей. попробуй тож самое на 1.4 и узрей косяк.


У меня стоит 1.5 — выводится 0. Я так понимаю, в 1.4 выводится 5?
Re[9]: передача параметра "по ссылке"
От: fellow.sufferer Россия  
Дата: 21.12.06 08:39
Оценка: 3 (1) +1
Здравствуйте, msqrt84, Вы писали:

M>У меня стоит 1.5 — выводится 0. Я так понимаю, в 1.4 выводится 5?

M>

Не, просто не компилится.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.