1、基本資料類型跟封裝類型
- 整型:
byte、int、short、long
- 浮點型:
float、double
- 字元型:
char
- 布爾型:
boolean
Java核心知識點及面試-01 Java核心知識點及面試-01
1、基本類型與封裝類型資料之間的轉換 valueOf()
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
-
是指表達式運算完後i++
再加1i
-
是指++i
加上1後再運算表達式的值i
為了提升代碼的可讀性,建議左加加和右加加操作不應(或盡量少)和他操作符混用,如果實在有必要,要分開寫。
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
- 對于基本類型,== 比較值是否相等;對于封裝類型,== 比較在記憶體中存在的位址是否相等。
- 對于封裝類型,
比較它們的值是否相等;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是類型,而s是
int
類型,通過+運算後s1自動轉換成
short
型。錯誤提示:Error:(21, 17) java: 不相容的類型: 從
int
轉換到
int
short
可能會有損失
運作第二個是正确的,s1=2,+1是
類型的操作,s1自動轉換
int
類型
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
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
?并簡述你的看法。