Ссылка на объект в Java - PullRequest
       7

Ссылка на объект в Java

4 голосов
/ 02 февраля 2009

рассмотрим этот простой пример сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response){
    Cookie cookie = request.getCookie();
    // do weird stuff with cookie object
}

Мне всегда интересно .. если вы модифицируете объект cookie, это по объекту или по ссылке?

Ответы [ 4 ]

10 голосов
/ 02 февраля 2009

если вы измените объект cookie, это по объекту или по ссылке?

Зависит от того, что вы подразумеваете под "изменить" здесь. Если вы измените значение ссылки, то есть cookie = someOtherObject, то сам исходный объект не изменится; просто ты потерял свою ссылку на это. Однако, если вы измените состояние объекта, например, вызывая cookie.setSomeProperty(otherValue), тогда вы, конечно, модифицируете сам объект.

Посмотрите на эти предыдущие вопросы для получения дополнительной информации:

3 голосов
/ 02 февраля 2009

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

cookie = new MySpecialCookie();

это не будет видно вызывающему методу. Однако при работе со ссылкой для изменения данных объект содержит:

cookie.setValue("foo");

тогда эти изменения будут видны звонящему.

0 голосов
/ 18 мая 2010

ссылка на объект отличается от объекта. например:

class Shape
{
    int x = 200;
}

class Shape1
{
    public static void main(String arg[])
    {
        Shape s = new Shape();   //creating object by using new operator
        System.out.println(s.x);
        Shape s1;                //creating object reference
        s1 = s;                  //assigning object to reference
        System.out.println(s1.x);
    }
}
0 голосов
/ 02 февраля 2009

В следующей строке кода

Cookie cookie = request.getCookie(); /* (1) */

метод request.getCookie() передает ссылку на объект Cookie.

Если вы позже измените cookie by, сделав что-то вроде

cookie = foo_bar(); /* (2) */

Тогда вы меняете внутреннюю ссылку. Это никак не влияет на ваш оригинальный cookie объект в (1)

Однако, если вы измените cookie, сделав что-то вроде

cookie.setFoo( bar ); /* assuming setFoo changes an instance variable of cookie */

Затем вы меняете исходный объект, полученный в (1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...