第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

以下兩個(gè)函數(shù)的區(qū)別是什么?

以下兩個(gè)函數(shù)的區(qū)別是什么?

慕慕森 2022-02-24 23:15:27
Java中String str_1="abc"; 和 String str_2=new String("def"); 的區(qū)別是什么?一直都未搞得清這兩種定義的區(qū)別..希望能有詳細(xì)說明,深入解析..在內(nèi)存中是怎樣存放的?堆棧中存放方式兩者區(qū)別是什么?在內(nèi)存中的分配是怎樣的?兩者有什么不同?
查看完整描述

2 回答

?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊

你給出的兩個(gè)字符串對象體現(xiàn)不這兩種定義的區(qū)別,當(dāng)然也是有區(qū)別的。

如果是:String str_1="abc"; String str_2=new String("abc");就明顯了。

---------------------------------------------
先說幾個(gè)概念吧

1.常量池

指的是在編譯期確定,并被保存在已編譯的字節(jié)碼文件中的一些數(shù)據(jù),它包括類、方法、接口等中的常量,也包括字符串常量。

2.==: 比較是否是同一個(gè)對象

3.equals(): 比較的是對象里的內(nèi)容

---------------------------------------------
下面我開始說區(qū)別

第1種:

String a="abc";
String b="abc";
System.out.print(a==b);

結(jié)果:true

原因:編譯時(shí),這兩個(gè)"abc"被認(rèn)為是同一個(gè)對象保存到了常量池中;運(yùn)行時(shí)JVM則認(rèn)為這兩個(gè)變量賦的是同一個(gè)對象,所以返回true。

---------------------
第2種:

String a=new String("abc");
String b=new String("abc");
System.out.print(a==b);

結(jié)果:false

原因:用構(gòu)造器創(chuàng)建的對象,是不會被放入常理池中的,也很明顯這完全是兩個(gè)對象,只是內(nèi)容相同罷了,結(jié)果當(dāng)然為false了。用equals()或者System.out.print(a.intern()==b.intern());就返回true了。

------------------------------
第3種

String a="abc";
String b=new String("abc");
System.out.print(a==b);

結(jié)果:false

原因:同上

---------------------------
第4種

String a="abcdef";
System.out.print(a=="abcdef");

結(jié)果:true

原因:運(yùn)行出現(xiàn)的字符串常量,若是在常量池中出現(xiàn)過,則JVM會認(rèn)為同一個(gè)對象,以節(jié)省內(nèi)存開銷,所以這兩個(gè)字符串會被認(rèn)為是同一個(gè)對象。

-------------------------------------------
第5種

String a="abcdef";
String b="";
String c=a+b;
System.out.print(c=="abcdef");

結(jié)果:false

原因:編譯時(shí),先將"abcedf"放在常量池中,而c的值則是在運(yùn)行時(shí)在堆里創(chuàng)建的。所以為false。

---------------------------------------------------------------------
其它太明顯的區(qū)別不在贅述。



查看完整回答
反對 回復(fù) 2022-02-27
?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

沒什么區(qū)別,用起來是一樣的~只是聲明方式不同就想數(shù)組可以這樣聲明:
var a=[];
也可以這樣聲明:
var a=array();
對象也是:可以直接var a={};也可以var a=Object;
使用起來都是一樣的,但是在內(nèi)錯(cuò)分配上不同,前者更節(jié)省內(nèi)存

查看完整回答
反對 回復(fù) 2022-02-27
  • 2 回答
  • 0 關(guān)注
  • 195 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號