簡體   English   中英

java中的對象引用

[英]Object reference in java

考慮這個簡單的servlet示例:

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

我總是想知道..如果你修改對象cookie ,是按對象還是通過引用?

如果您修改對象cookie ,是按對象還是按引用?

取決於你在這里“修改”的意思。 如果更改引用的值,即cookie = someOtherObject ,則原始對象本身不會被修改; 只是你失去了對它的引用。 但是,如果您更改對象的狀態,例如通過調用cookie.setSomeProperty(otherValue) ,那么您當然正在修改對象本身。

有關更多信息,請查看以前的相關問題:

Java方法按值傳遞對象引用 因此,如果您更改參考本身,例如

cookie = new MySpecialCookie();

方法調用者不會看到它。 但是,當您操作引用以更改對象包含的數據時:

cookie.setValue("foo");

然后調用者可以看到這些更改。

對象引用不同於對象。 例如:

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

在以下代碼行中

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

request.getCookie()方法將refrence傳遞給Cookie對象。

如果你以后cookie by做類似的事情改變cookie by

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

然后你正在改變內部參考。 它決不會影響(1)中的原始cookie對象

但是,如果您通過執行類似的操作來更改cookie

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

然后你要更改收到的原始對象(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM