簡體   English   中英

Java中的方法的可變范圍

[英]Variable scope with a method in Java

我以為我了解變量作用域,直到遇到以下代碼:

private static void someMethod(int i, Account a) {
  i++;
  a.deposit(5);
  a = new Account(80);
}

int score = 10;
Account account = new Account(100);
someMethod(score, account);
System.out.println(score); // prints 10
System.out.println(account.balance); // prints 105!!!

編輯:我知道為什么a = new Account(80)不會做任何事情,但是我對a.deposit(5)實際工作感到困惑,因為a只是傳入的原始帳戶的副本...

變量a傳入的引用的副本 ,因此它仍然具有相同的值,並且與account變量引用相同的Account對象(也就是說,直到您重新分配a為止)。 進行存款時,您仍在使用對原始對象的引用,該對象在外部范圍中仍被引用。

您可能需要閱讀有關Java中的值傳遞的更多信息。

為了清楚起見,所有通過值傳遞的變量意味着被調用的方法僅獲取參數的值,而不是對這些對象的引用(指針),因此在方法主體中對這些對象的任何修改均不會影響外物。 與c ++不同,它具有通過引用傳遞對象的選項,其中方法獲取實際對象而不是其值,因此方法主體中的任何修改都會影響外部對象.Java沒有通過引用傳遞。

在Java中,變量按值傳遞。

暫無
暫無

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

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