Java面試題(持續更新)
阿新 • • 發佈:2021-07-22
1.值傳遞和引用傳遞的區別
基本資料型別引數傳遞時,傳遞的是值的副本,改變值的副本,不會影響原來的變數
引用資料型別引數傳遞時,傳遞的是地址的副本,副本也是指向同一個變數,會影響原來的變數
String型別屬於特殊的引用資料型別,作為引數傳遞,原來的值不會改變
2.== 與 equals的區別
== 比較基本資料型別比較的是值,比較引用資料型別,比較的是地址
equals 只能比較引用資料型別,比較的是地址
擴充套件
2.1 String型別
String類如果直接使用 = 號賦值,將先從常量池中查詢有沒有同內容的變數
如果有,則直接使用已存在的內容的地址
如果沒有,將此內容存在常量池中,完成賦值
這樣做是為了節省記憶體空間
public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); System.out.println(str1.equals(str2)); // true System.out.println(str1.equals(str3)); // true System.out.println(str1 == str2); // true System.out.println(str1 == str3); // false }
2.2 整形包裝類
整形包裝類和char包裝類直接使用 = 號賦值,如果數值相同
取值範圍在byte取值範圍以內,使用 == 比較結果為 true
超過byte取值範圍,使用 == 比較結果為 flase
因為JDK的開發人員為了節省記憶體空間,將byte取值範圍內的數值存放在一個快取陣列中
如果在byte取值範圍,那麼將從陣列中取出對應的值
如果不在byte取值範圍內,直接new一個新的物件
public static void main(String[] args) { Integer i1 = 25; Integer i2 = 25; System.out.println(i1 == i2); // true Integer i3 = 200; Integer i4 = 200; System.out.println(i3 == i4); // false Integer i5 = 127; Integer i6 = 127; System.out.println(i5 == i6); // true Integer i7 = 128; Integer i8 = 128; System.out.println(i7 == i8); // false Byte b1 = 20; Byte b2 = 20; System.out.println(b1 == b2); // true Short s1 = 120; Short s2 = 120; System.out.println(s1 == s2); // true Short s3 = 200; Short s4 = 200; System.out.println(s3 == s4); // false Long l1 = 20L; Long l2 = 20L; System.out.println(l1 == l2); // true Long l3 = 300L; Long l4 = 300L; System.out.println(l3 == l4); // false Character ch1 = 20; Character ch2 = 20; System.out.println(ch1 == ch2); //true Character ch3 = 200; Character ch4 = 200; System.out.println(ch3 == ch4); //false }
3.氣泡排序
陣列中,兩兩相鄰比較,遇到條件成立的就交換位置
經分析:
比較的輪數是陣列長度 -1 ,外層迴圈控制比較的輪數
每一輪比較的次數:最多的一次是陣列長度 -1 ,依次遞減,內層迴圈控制比較的次數
外層迴圈次數:N - 1
內層迴圈次數:N - 1 - i
public static void main(String[] args) {
int [] nums = {20,1,55,784,10,233,65};
for(int i = 0;i < nums.length - 1;i++) {
for(int j = 0;j < nums.length - 1 - i;j++) {
if(nums[j] < nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(nums));
}