Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言帆啃。Java 技術(shù)具有卓越的通用性瞬女、高效性、平臺(tái)移植性和安全性努潘,廣泛應(yīng)用于PC诽偷、數(shù)據(jù)中心坤学、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)报慕、移動(dòng)電話和互聯(lián)網(wǎng)深浮,同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。
4道java小測(cè)試
1.Integer a=1000,b=1000; Integer c=100,d=100;
System.out.println(a==b);System.out.println(c==d);
false,true
按照常理來說眠冈,這四個(gè)數(shù)都是新建的對(duì)象飞苇,應(yīng)該是false才對(duì),官方的解釋是:小編推薦一個(gè)學(xué)JAVA的學(xué)習(xí)裙【 一三三蜗顽,九三零布卡,六九三】,無論你是大牛還是小白雇盖,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)忿等!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享崔挖!
由于小數(shù)使用的較多贸街,所以把-128--127之間的數(shù)緩存了下來,這時(shí)引用的就是同一個(gè)對(duì)象虚汛,所以是false和true;
2.
String s1="abc";
String s2="abc";
String s3=new String("abc");
System.out.println(s1==s2);
System.out.println(s1==s3);
結(jié)果是true,false
我們知道:基本類型變量和對(duì)象的引用變量都是在函數(shù)的棧內(nèi)存中分配的匾浪,而堆內(nèi)存中則存放new出來的對(duì)象和數(shù)組,其實(shí)還有一塊區(qū)域叫常量池;
當(dāng)我們創(chuàng)建String s1="abc";時(shí)卷哩,其實(shí)abc被存到了字符串常量池中蛋辈,這樣當(dāng)我們?cè)俅蝿?chuàng)建Strings2="abc";時(shí),此時(shí)的abc來自常量池将谊。
而new出來的字符串,abc來自常量池冷溶,但是是在堆中存儲(chǔ)的;
3.int[]arr1={1,2,3,4,5,6};
int[]arr2={1,2,3,4,5,6};
System.out.println(arr1==arr2);
System.out.println(arr1.equals(arr2));
false;false
因?yàn)閿?shù)組沒有重寫equals方法尊浓,所以和==是一樣的逞频;
比較兩個(gè)數(shù)組是否相等用Arrays.equals(arr1,arr2); true 而且此方法只能比較一層,多層嵌套的數(shù)組就不起作用了栋齿;
深層嵌套數(shù)組的比較Arrays.deeEquals(arr1,arr2);就像下面這樣苗胀,但是此方法參數(shù)必須是包裝類,
int[]arr1={1,2,3,4,5,6};
int[]arr2={1,2,3,4,5,6};
System.out.println(Arrays.deepEquals(arr, arr2));
4.小編推薦一個(gè)學(xué)JAVA的學(xué)習(xí)裙【 一三三瓦堵,九三零基协,六九三】,無論你是大牛還是小白菇用,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)澜驮!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享惋鸥!
[java]
1.?public?class?Run {
2.
3.?public?static?void?main(String[] args) {
4. // TODO Auto-generated method stub
5. Run run=new?Run();
6. run.mRun("機(jī)器");
7. }
8.?public?void?mRun(final?String name){
9.?new?Thread(){
10.?public?void?run(){
11.?try?{
12. Thread.sleep(1000);
13. }?catch?(InterruptedException e) {
14. // TODO Auto-generated catch block
15. e.printStackTrace();
16. }
17. System.out.println(name);
18. }
19. }.start();
20.
21. }
22. }
當(dāng)內(nèi)部類訪問局部變量時(shí)杂穷,要在局部變量前加final悍缠,不然編譯器會(huì)報(bào)錯(cuò),原因是什么呢耐量?
內(nèi)部類的生命周期是成員級(jí)別的飞蚓,而局部變量的生命周期是在方法體之內(nèi),
當(dāng)mRun執(zhí)行時(shí)拴鸵,run線程也執(zhí)行玷坠,新線程會(huì)在里面睡一秒,主線程繼續(xù)執(zhí)行劲藐,mRun執(zhí)行完畢八堡,name屬性的生命周期結(jié)束,
1秒之后執(zhí)行System.out.println(name);但是此時(shí)name已經(jīng)不在內(nèi)存中了聘芜,java為了杜絕這種錯(cuò)誤兄渺,內(nèi)部類使用到局部變量
時(shí)要用final修飾,這樣該變量就在內(nèi)存中有一份復(fù)制品,仿佛生命周期延長(zhǎng)了汰现。
5.Integer a=new Integer(1000);
int b=1000;小編推薦一個(gè)學(xué)JAVA的學(xué)習(xí)裙【 一三三挂谍,九三零,六九三】瞎饲,無論你是大牛還是小白口叙,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具嗅战,很多干貨和技術(shù)資料分享妄田!
System.out.println(a==b);
true;原因:由于是1000,所以不存在緩存問題,Integer和int比較時(shí)驮捍,會(huì)將Integer拆箱為int疟呐,所以是true;