这里基于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,谁表示的数据范围更大?
数据类型 | 字节 |
---|---|
long | 8 |
float | 4 |
为什么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.youkuaiyun.com/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