[英]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.