false,true
成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)公司把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來開發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!
第一個(gè)為false是因?yàn)椤?=“比較的是兩個(gè)應(yīng)用,他們?cè)趦?nèi)存中的地址不一樣,所以為false
第二個(gè)為true 是因?yàn)镾tring類里重寫了equals方法,只要兩個(gè)對(duì)象的內(nèi)容一樣,就返回true
/*
*一般情況不建議這么使用類對(duì)象
*要這么做可以,場(chǎng)景只有一種內(nèi)部類
*這樣的做法違反數(shù)據(jù)封裝設(shè)計(jì)原則,極少情況會(huì)這么用。
*如果非得這么用,設(shè)計(jì)成私有內(nèi)部類,這么用少get、set方法,效率會(huì)稍有提高
*因?yàn)轭悪?quán)限聲明符為缺省,因此此類的訪問權(quán)限為同包內(nèi)的其它類可使用
*/
class?ValHold{
//實(shí)例成員變量i初始化為10
public?int?i?=?10;
}
public?class?Obparm?{
public?static?void?main(String[]?args)?{
/*
*申明int類型變量z,0開頭代表8進(jìn)制表示方法
*換算成10進(jìn)制整數(shù)是:13
*此變量你的整個(gè)程序中都未使用到
*/
int?z?=?015;
/*
*實(shí)例化對(duì)象本省,因?yàn)閙ain方法是程序入口點(diǎn),靜態(tài)方法,
*此方法中能直接訪問的成員變量必須申明為靜態(tài)的
*能訪問的成員方法,也必須申明為靜態(tài)的
*此處是為了調(diào)用實(shí)例方法amethod,所以必須先實(shí)例化對(duì)象
*/
Obparm?o?=?new?Obparm();
/*
*調(diào)用Obparm類實(shí)例O的amethod方法
*/
o.amethod();
}
public?void?amethod(){
//申明變量i,棧級(jí)別變量,只在當(dāng)前運(yùn)行的方法塊內(nèi)生效
int?i?=?99;
//申明并初始化類ValHold實(shí)例變量v,棧級(jí)別變量,只在當(dāng)前運(yùn)行的方法塊內(nèi)生效
ValHold?v?=?new?ValHold();
//修改實(shí)例v的成員變量i為30
v.i=30;
//調(diào)用Obparm?實(shí)例方法,隱含實(shí)例指針this,代表實(shí)例自身
//此處完整的寫法是,this.another(v,i);但this關(guān)鍵字可省略
another(v,i);
System.out.print(v.i);
}
public?void?another(ValHold?v,int?i){
//修改實(shí)參i
i?=?0;
//修改v實(shí)例變量i的值為20,實(shí)參引用的對(duì)象變量i也會(huì)被修改
v.i?=?20;
//重新實(shí)例化一個(gè)ValHold對(duì)象
ValHold?vh?=?new?ValHold();
//修改實(shí)參v引用vh,或者讓v的指針指向vh
v?=?vh;
//輸出vh實(shí)例變量i
System.out.print(v.i);
//輸出i
System.out.print(i);
}
}
/*
*********************************************************************************
從以上我做的注釋,最終輸出結(jié)果為:
10020
如果調(diào)用
System.out.println
輸出結(jié)果是:
10
20
我不知道那個(gè)老師教你們這個(gè)的,如果對(duì)初學(xué)者,很難理解這么多內(nèi)容。
他想考你們的是,代碼的作用域,類方法的實(shí)參參數(shù)的傳遞是引用傳遞,實(shí)參可以當(dāng)方法中的變量,修改了實(shí)參的引用,知會(huì)在方法塊內(nèi)生效(或者當(dāng)前運(yùn)行棧上生效)。
不知道你能看明白不?
*********************************************************************************
*/
第一行輸出結(jié)果是abc:
原因是:
s.substring(1);
s.replace("bc", "xyz");
這兩句話沒有任何作用 ~因?yàn)镾tring是屬于值傳遞~
第二行 輸出結(jié)果是false:
原因是:
用==比較字符串,是比較兩個(gè)變量本身的值,即兩個(gè)對(duì)象在內(nèi)存中的首地址。用equals比較就會(huì)為true,equals比較的是內(nèi)容是否相同。
附:
1、值傳遞、引用傳遞的區(qū)別:
值傳遞:(形式參數(shù)類型是基本數(shù)據(jù)類型):方法調(diào)用時(shí),實(shí)際參數(shù)把它的值傳遞給對(duì)應(yīng)的形式參數(shù),形式參數(shù)只是用實(shí)際參數(shù)的值初始化自己的存儲(chǔ)單元內(nèi)容,是兩個(gè)不同的存儲(chǔ)單元,所以方法執(zhí)行中形式參數(shù)值的改變不影響實(shí)際參數(shù)的值。
引用傳遞:(形式參數(shù)類型是引用數(shù)據(jù)類型參數(shù)):也稱為傳地址。方法調(diào)用時(shí),實(shí)際參數(shù)是對(duì)象(或數(shù)組),這時(shí)實(shí)際參數(shù)與形式參數(shù)指向同一個(gè)地址,在方法執(zhí)行中,對(duì)形式參數(shù)的操作實(shí)際上就是對(duì)實(shí)際參數(shù)的操作,這個(gè)結(jié)果在方法結(jié)束后被保留了下來,所以方法執(zhí)行中形式參數(shù)的改變將會(huì)影響實(shí)際參數(shù)
2、用==比較和用equals比較的區(qū)別:
對(duì)于字符串變量來說,使用“==”和“equals()”方法比較字符串時(shí),其比較方法不同.
“==”比較兩個(gè)變量本身的值,即兩個(gè)對(duì)象在內(nèi)存中的首地址.
“equals()”比較字符串中所包含的內(nèi)容是否相同.
您好,非常榮幸能在此回答您的問題。以下是我對(duì)此問題的部分見解,若有錯(cuò)誤,歡迎指出。輸出:5
public void add(int pInt){ //定義一個(gè)方法,參數(shù)是一個(gè)int型
pInt ++; //pInt = pInt + 1;
}
這題主要是考你參數(shù)傳遞的問題,int型傳的是值,所以雖然pInt++后pInt=6
但沒有帶回去,所以i還是5非常感謝您的耐心觀看,如有幫助請(qǐng)采納,祝生活愉快!謝謝!