成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java - 求助:詳細(xì)分析以下這段代碼,搞糊涂了

瀏覽:116日期:2023-12-15 15:27:48

問(wèn)題描述

public class T1 {

public static void rename(String aa){aa='AA'; }public static void main(String args[ ]){String aa='BB';rename(aa); System.out.println(aa);}

}我的理解:rename方法中的aa是在棧內(nèi)存中,main方法中的aa是在堆內(nèi)存中的,執(zhí)行rename方法是不會(huì)修改main方法中的aa的值,是這樣嗎?

問(wèn)題解答

回答1:

按值傳遞(call by value)是最常用的求值策略:函數(shù)的形參是被調(diào)用時(shí)所傳實(shí)參的副本。修改形參的值并不會(huì)影響實(shí)參。

按引用傳遞(call by reference)時(shí),函數(shù)的形參接收實(shí)參的隱式引用,而不再是副本。這意味著函數(shù)形參的值如果被修改,實(shí)參也會(huì)被修改。同時(shí)兩者指向相同的值。

Java核心技術(shù)(I)提到,Java都是按值傳遞,首先對(duì)于基本類型,函數(shù)并不能修改它的值,對(duì)于引用類型,函數(shù)也不能修改使得其指向另一個(gè)對(duì)象。所以都是按值傳遞。

回答2:

不是吧,函數(shù)里頭的aa指向了新的地址,外部的aa還是指向'BB'的地址,所以結(jié)果是BB

回答3:

函數(shù)傳值,并沒(méi)有把MAIN函數(shù)中的AA傳進(jìn)去,而是對(duì)AA的值做了一份拷貝,然后傳遞進(jìn)去

標(biāo)簽: java