天天看點

Java核心知識點及面試-01

1、基本資料類型跟封裝類型

  • 整型:​

    ​byte、int、short、long​

  • 浮點型:​

    ​float、double​

  • 字元型:​

    ​char​

  • 布爾型:​

    ​boolean​

    ​​
    Java核心知識點及面試-01
    Java核心知識點及面試-01

1、基本類型與封裝類型資料之間的轉換​

​valueOf()​

public class StringtoNum { //主類名需要和檔案名一緻
 //這是個main 函數
public static void main(String[] args)
//從資料庫裡取到的num 是String 類型
String num =”123”;
//通過Integer 封裝類進行資料轉換
int intVal = Integer.valueOf(num);
//通過Float 封裝類進行資料轉換
float fltVal = Float.valueOf(num);
//通過Long 封裝類進行資料轉換
long longVal = Long.valueOf(num);
//依次輸出三個轉換後的變量
System.out.println(intVal);
System.out.println(fltVal);
System.out.println(longVal);      

2、​

​i++​

​​與​

​++i​

​的使用建議

  • ​i++​

    ​​是指表達式運算完後​

    ​i​

    ​再加1
  • ​++i​

    ​​是指​

    ​i​

    ​加上1後再運算表達式的值

為了提升代碼的可讀性,建議左加加和右加加操作不應(或盡量少)和他操作符混用,如果實在有必要,要分開寫。

int i = 10;
int j = 10;
int k;
//k = i++ *3  不建議!!!++i也是一樣
k = i * 3 ;
i ++;      

3、三目運算代替if語句

表達式1 ?表達式2 : 表達式3;

文法:判斷表達式1的傳回值,如果是true 則執行表達式2 ,否則執行表達式3 。

int x = 1001;
String yhx = "nice";
if(x > 1000)
    yhx = "good";
else
    yhx = "nice";
//三目運算
x > 1000 ? yhx = "good": yhx = "nice";      

4、==與​

​equals​

​的差別

  • 對于基本類型,== 比較值是否相等;對于封裝類型,== 比較在記憶體中存在的位址是否相等。
  • 對于封裝類型,​

    ​equals​

    ​ 比較它們的值是否相等;
public class BasicGrammer {
    public static void main(String[] args) {
        boolean flags = true;
        int i = 10;
        int j = 10;
        flags = (i == j) ? true : false;
        System.out.println(flags);  //true
        Integer x = new Integer("10");
        Integer y = new Integer("10");
        System.out.println(x.equals(y));  //true
        System.out.println(x == y);       //false
    }
}      

5、常用面試題

( 1 )簡述&和&&,以及|和||的差別。

答:& 和 |是位運算符,不常用;&& 和||是邏輯運算符,通常在if、while、for中使用。

( 2 )運作short s1 = 1, s1 = s1 + 1 ;會出現什麼結果?運作short s1 = 1; s1 += 1 ;又會出現什麼結果?

答:運作第一個會報錯,因為1是​

​int​

​​類型,而s是​

​short​

​​類型,通過+運算後s1自動轉換成​

​int​

​​型。錯誤提示:Error:(21, 17) java: 不相容的類型: 從​

​int​

​​轉換到​

​short​

​​可能會有損失

運作第二個是正确的,s1=2,+1是​​

​int​

​​類型的操作,s1自動轉換​

​int​

​類型

( 3 )用最高效率的方法算出2 乘以8 等于多少。

移位運算符:​

​int i = 2 << 3​

​;

( 4 ) “ == ”和equals 萬法有什麼差別

==在基本類型,比較值是否相等,在封裝類型中比較記憶體中的位址

equals在封裝類型中比較值是否相等,

( 5 )​

​Integer​

​​ 與​

​int​

​的差別是什麼。

​Integer​

​​是封裝類型,包含​

​int​

​​基本類型的基本操作,​

​int​

​是基本類型

12 , -12

( 7 )​

​float​

​​ 型​

​float f = 3.4​

​是否正确?

No!!精度不正确,​

​float f = 3.4f​

​​或者​

​float f = (float)3.4​

2、流程控制

1、if …else

以閏年為例

public class BasicGrammer {
    public static void main(String[] args) {
       int year = 2020;
       if((year % 4 ==0 && year % 100 != 0) || (year % 400 == 0)){
           System.out.println("yes");
       }else {
           System.out.println("no");
       }
    }
}      

注:在表達式不要多次使用邏輯表達式&&和||,如果需求很複雜,應分解多個if…else語句

2、避免短路效應

這裡主要講&&跟||在if語句中使用!

  • if(表達式1 && 表達式2)若表達式1為false,那麼不管表達式2是true or false,都不會執行表達式2,if語句為false,就沒有意義了
  • if(表達式1 || 表達式2)若表達式1為true,那麼不管表達式2是true or false,都不會執行表達式2,if語句為true
public class BasicGrammer {
    public static void main(String[] args) {
    int a = 2 ;
    int b = 3 ;
    if(a > 0 || b-- > a ){
        System.out.println(b);   //b = 3
    }if (a < 0 && ++b > 0){
        }else {
            System.out.println(b);  // b = 3
        }
    }
}      

3、​

​swtich​

​​中的​

​default​

​​和​

​break​

public class BasicGrammer {
    public static void main(String[] args) {
        char grade = 'A';
        switch (grade){
            case 'A':{
                System.out.println("1000");
                break;
            }
            case 'B':{
                System.out.println("8000");
                break;
            }
            case 'C':{
                System.out.println("600");
                break;
            }
            case 'D':{
                System.out.println("400");
                break;
            }
            case 'E':{
                System.out.println("200");
                break;
            } default:{
                System.out.println("nice");
            }
        }
    }
}      

**對于每個case語句,都要加上break,若沒有break,則輸出就變了,沒加break的case都會輸出!!**如果不加​

​break​

​ ,即使執行完本部台case 分支後,還會執行後繼的分支語句。

不加default不會報錯,但強烈加上!!!

4、常用面試題

( 1 ) switch 語句能否作用在byte 、long 、String 上?

  • 可以用在​

    ​byte、int、short、char​

    ​以及它們的封裝類上
  • 不能用在其他基本類型上​

    ​long、double、float、boolean​

    ​以及封裝類
  • jdk1.7及以上,可以用以字元串
  • 可以用于枚舉類型

( 2 )在Java 中,如何跳出目前的多重嵌套循環。

break or continue ; break跳出整個循環;continue跳出目前循環。

( 3 ) while 和do while 有什麼差別?

  • while是先判斷再執行;do…while是先執行再判斷,同等條件下,後者多執行了一次。

( 4 )你有沒有用過關鍵字​

​goto​

​ ?并簡述你的看法。