日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

几个Java基础题

發布時間:2025/3/15 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 几个Java基础题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.java中線程能不能重復start

  t1.start();
?? ??? ?System.out.println("ssss");
?? ??? ?t1.start();

答:第一個start能運行,然后打出ssss,第二個運行時錯誤。編譯不會錯。

2.java中接口能不能多繼承?

答:可以多繼承。但是只能繼承別的接口。不能直接或間接的繼承自己。

Interface3 Extends Interface0, Interface1, interface……

不允許類多重繼承的主要原因是,如果A同時繼承B和C,而b和c同時有一個D方法,A如何決定該繼承那一個呢? 但接口不存在這樣的問題,接口全都是抽象方法繼承誰都無所謂,所以接口可以繼承多個接口

3.抽象類能不能實現接口?

答:當然可以。

4.Java 中對象的equals,==,hashCode(),還有HashMap.put(object,xxxx)之間的關系。

String a="abc";String b="abc"; a==b為true

String a=new String("abc"); a==b 為false

對于非基礎數據類型來講,== 比較的是地址,“abc”是常量字符串,a="abc" ,b="abc"其實a,b指向都是同一個常量字符串地址。

new String 是在堆區分配內存,a=new String("abc"),a指向堆區的 new String地址。

1 package com.abc.zj; 2 3 public class Test { 4 String a; 5 public Test(String a){ 6 this.a=a; 7 } 8 public int hashCode(){ 9 10 return super.hashCode(); 11 //return 1; 12 } 13 public boolean equals(Object object){ 14 if(a==((Test)object).a){ 15 return true; 16 }else{ 17 return false; 18 } 19 } 20 } 1 public static void main(String argv[]) throws ArithmeticException{ 2 Test testa = new Test("abc"); 3 Test testb = new Test("abc"); 4 if(testa==testb){ 5 System.out.println("testa==testb"); 6 } 7 if(testa.equals(testb)){ 8 System.out.println("testa equals testb"); 9 } 10 if(testa.a==(testb.a)){ 11 System.out.println("testa.a == testb.a"); 12 } 13 if(testa.a.equals(testb.a)){ 14 System.out.println("testa.a equals testb.a"); 15 } 16 17 Map<Test,String> map = new HashMap<Test,String>(); 18 map.put(testa, "value1"); 19 map.put(testb,"value2"); 20 for(Test t:map.keySet()){ 21 System.out.println(map.get(t)); 22 } 23 }

運行結果:

testa equals testb
testa.a == testb.a
testa.a equals testb.a
value1
value2

說明:最后 value1 和 value2 先后順序可能有變化,每次運行都可能不一樣。map遍歷隨機,沒順序。

public int hashCode(){//return super.hashCode();return 1;}

?這樣以后,運行結果變為:

testa equals testb
testa.a == testb.a
testa.a equals testb.a
value2

==================

public int hashCode(){//return super.hashCode();return 1;}public boolean equals(Object object){ // if(a==((Test)object).a){ // return true; // }else{ // return false; // }return false;}

?這樣 運行結果變為:

testa.a == testb.a
testa.a equals testb.a
value2
value1

結論:hashCode 一樣 且 equals 返回true,hashMap才認為兩個key相同。

?

5.Integer ,int ,==,裝箱 拆箱

小于128的Integer之間的比較。

Integer i=128;Integer b=128;if(i==b){System.out.println("i=b");}if(i.equals(b)){System.out.println("i equals b");}

輸出 i equals b

Integer i=127;Integer b=127;if(i==b){System.out.println("i=b");}if(i.equals(b)){System.out.println("i equals b");}

輸出

i=b
i equals b

原因: -128 到 127 之間 用緩存。看Integer源碼

public static Integer valueOf(int i) {assert IntegerCache.high >= 127;if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}

網上其他的人解釋:看看Integer 的源代碼就知道了,其實就是Integer 把-128-127之間的每個值都建立了一個對應的Integer 對象,類似一個緩存。由于Integer 是不可變類,因此這些緩存的Integer 對象可以安全的重復使用。Integer i = XXX ,就是Integer i = Interger.valueOf(XXX), 首先判斷XXX 是否在-128-127 之間,如果是直接return 已經存在的對象,否則就只能new 一個了。

new Integer 就不一樣了。例如:

Integer i=new Integer(127);Integer b=127;if(i==b){System.out.println("i=b");}if(i.equals(b)){System.out.println("i equals b");}

這樣結果是:i equals b

?

?

6.子類重寫父類的方法的訪問修飾符,不能低于父類的方法訪問權限

對于接口來講,實現接口的類中,對于實現的接口中的方法,都必須是public。因為接口中的方法都是public。

接口中的方法,只有public 和 abstract可以修飾,并且默認就是他倆修飾。(static不行)。

接口中的常量,默認都是public final static 修飾。

轉載于:https://www.cnblogs.com/aji2014/p/6687746.html

總結

以上是生活随笔為你收集整理的几个Java基础题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。