Java基礎知識總結-1

筆上烽煙發表於2020-12-20

這裡基於Java的基礎知識列舉一些題目,這些題目比較考驗基本功是否紮實。同樣這些有可能作為職場面試題出現,所有大家可以好好看看。

一、變數與運算子

問題1:float和long表示的資料範圍,誰大?

問題2:以下程式碼中,是否有錯誤?為什麼錯誤?

byte b1 = 2;
byte b2 = b1 + 128;
byte b3 = 128;

char c1 = 'a';
short s1 = 10;
char c2  = c1 + s1;

問題3:以下程式碼的結果,是什麼?

char c1 = 'a';
int i1 = c1 + 10;
System.out.println(i4);

int i2 = 128;
byte b = (byte)i2;
System.out.println(b);

char c = 'a';
int num = 10;
String str = "hello";
System.out.println(c + num + str);
System.out.println(c + str + num);
System.out.println(c + (num + str));
System.out.println(str + num + c);

int m = 2;
int n = 3;
n *= m++;
System.out.println("m=" + m);
System.out.println("n=" + n);

int n1 = 10;
n1 += (n1++) + (++n1);
System.out.println(n1);

問題4:如果最快算出2*8的結果?

二、程式流程控制

問題5:以下程式碼的結果,是什麼?

int c = 5;
switch(c){
    default:
        System.out.println("a");
    case 4:
        System.out.println("b");
    case 3:
        System.out.println("c");
        break;
    case 2:
        System.out.println("d");
    case 1:
        System.out.println("e");
}

三、陣列

問題6:以下程式碼是否有錯誤?

int[] arr1 = {1,2,3};
int arr2[] = new int[]{1,2,3};
int[] arr3 = new int[3]{1,2,3};

int[][] arr4 = new int[3][];
System.out.println(arr4[0]);//null
System.out.println(arr4[0][0]);//報java.lang.NullPointerException

問題7:以下程式碼的結果,是什麼?

int[] arr1 = {};
System.out.println(arr1.length);
System.out.println(arr1);
		
int[] arr2= new int[5];
System.out.println(arr2[3]);
System.out.println(arr2);

char[] c = new char[5];
System.out.println(c);
char[] c1 = new char[]{'a','b','c'};
System.out.println(c1);

int[][] arr = new int[3][4];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[0][0]);

答案

  • 問題1:float和long,誰表示的資料範圍更大?
資料型別位元組
long8
float4

為什麼8位位元組long的資料範圍會比4位位元組float的資料範圍小呢?
long:2^63-1;float : 3.4x10^38 > 2x10^38 > 2x8^38
可得:2x8^38 = 2x2338 = 2x2^114
因為:2x2^114 > 2^63-1
所以:float的資料範圍大於long的資料範圍

關於兩者記憶體儲存,可以參考文章:https://blog.csdn.net/weixin_42518062/article/details/85046071

  • 問題2:以下程式碼中,是否有錯誤?為什麼錯誤?
byte b1 = 2;
byte b2 = b1 + 128;//編譯報錯,因為運算後型別會自動提升
byte b3 = 128;//編譯報錯,因為範圍溢位

char c1 = 'a';
short s1 = 10;
char c2  = c1 + s1;//編譯報錯,因為運算後型別會自動提升
  • 問題3:以下程式碼的結果,是什麼?
char c1 = 'a';
int i1 = c1 + 10;
System.out.println(i4);
//字元'a'代表97,加10,得107

int i2 = 128;
byte b = (byte)i2;
System.out.println(b);
//精度損失,-128

char c = 'a';
int num = 10;
String str = "hello";
System.out.println(c + num + str);//107hello
System.out.println(c + str + num);//ahello10
System.out.println(c + (num + str));//a10hello
System.out.println(str + num + c);//hello10a
//String可以和8種基本資料型別變數做運算,且運算只能是連線運算

int m = 2;
int n = 3;
n *= m++; //n = n * m++;	
System.out.println("m=" + m);//3
System.out.println("n=" + n);//6

int n1 = 10;
n1 += (n1++) + (++n1);//n1 = n1 + (n1++) + (++n1);
System.out.println(n1);//10+10+12=32

問題4:如果最快算出2*8的結果?

通過位運算
2<<<3  或者  8<<1,兩種最高效O(1)

問題5:以下程式碼的結果,是什麼?

int c = 5;
switch(c){
    default:
        System.out.println("a");
    case 4:
        System.out.println("b");
    case 3:
        System.out.println("c");
        break;
    case 2:
        System.out.println("d");
    case 1:
        System.out.println("e");
}
//列印abc

問題6:以下程式碼是否有錯誤?

int[] arr1 = {1,2,3};//正確,型別推斷
int arr2[] = new int[]{1,2,3};//正確,宣告 + 初始化 + 賦值
int[] arr3 = new int[3]{1,2,3};//沒有這樣的語法

int[][] arr4 = new int[3][];
System.out.println(arr4[0]);//列印null
System.out.println(arr4[0][0]);//報錯java.lang.NullPointerException

問題7:以下程式碼的結果,是什麼?

int[] arr1 = {};
System.out.println(arr1.length);//列印0
System.out.println(arr1);//列印物件的地址值[I@7d6f77cc

int[] arr2= new int[5];
System.out.println(arr2[3]); //a[3]的預設值為0
System.out.println(arr2); //列印物件的地址值[I@5aaa6d82

char[] c = new char[5];
System.out.println(c); //列印的不是地址值,而是值,5個空格。
char[] c1 = new char[]{'a','b','c'};
System.out.println(c1); //abc
//這是因為println()過載方法的結果是不同的

int[][] arr = new int[3][4];
System.out.println(arr);//列印地址值[[I@5aaa6d82
System.out.println(arr[0]);//列印地址值[I@73a28541
System.out.println(arr[0][0]);//列印int預設值0

相關文章