黑马程序员java面试题汇总
面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
- byte b1 = 3;
- byte b2 = 4;
- byte b3 = b1 + b2;
- byte b4 = 3 + 4;
复制代码
答:byte b3 = b1 + b2;//编译出错
首先b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值;其次byte类型的变量在进行运算的时候,会自动类型提升为int类型,因此b1 + b2的结果是int类型的,无法赋值给byte类型,只能进行强转后才能赋值。
byte b4 = 3 + 4;//正确
3和4都是常量,java有常量优化机制,就是在编译的的时候直接把3和4的结果赋值给b4了。
面试题:判断输出的值。
- System.out.println("hello"+'a'+1);
- System.out.println('a'+1+"hello");
- System.out.println("5+5="+5+5);
- System.out.println(5+5+"=5+5");
复制代码
答:输出结果:helloa1 //任何数据类型用“+”与字符串连接都会变成新的字符串
98hello //根据ASCII码表,a对应int类型是97,'a'+1也就是98,然后与字符串相连
5+5=55 //2个5依次用“+”与字符串相连
10=5+5 //5+5先进性运算,在与字符串连接
面试题:请计算出x,y的值?
- int x = 4;
- int y = (x++)+(++x)+(x*10);
复制代码
答:x=6;
y= 4+6+6*10 =70
面试题:问下列哪句会报错,为什么?
- byte b = 10;
- b++;
- b = b + 1;
复制代码
答:b = b + 1;此处报错,1是int类型的,b+1运算b会自动提升为int类型,因此int类型的b+1无法赋值给byte。
面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
- short s=1;s = s+1;
- short s=1;s+=1;
复制代码
答:s = s+1;此句出错,原因见上题
s+=1;底层相当于s=(short)s+1;
面试题:&&和&、||和|的区别?
答:最终结果一样。
&&具有短路效果。左边是false,右边不执行。
&是无论左边是false还是true,右边都会执行。
||同样具有短路效果。左边是true,右边不执行。
|是无论左边是false还是true,右边都会执行。
面试题:请实现两个整数变量的交换(不借用第三方参数)
int x = 1;
int y = 2;
答:第一种实现:
x = x^y;
y = x^y;
x = x^y;
(^的特点:一个数据对另一个数据位异或两次,该数本身不变。)
另一种实现:
x = x+y;
y = x-y;
x = x-y;
(弊端:可能超出int取值范围,损失精度)
面试题:switch的表达式有哪些?
答:switch原本可以支持:byte,short,int,long类型的数据 JDK1.5新增了枚举类型,JDK1.7新增了String类型。
面试题:下列程序的结果是?
- int x = 2;
- int y = 3;
- switch(x){
- default:
- y++;
- case 3:
- y++;
- break;
- case 4:
- y++;
- }
- System.out.println("y="+ y);
复制代码
答:y=5;break表示退出switch语句,没有break会出case穿透。开始x=2,因此进入default,执行y++(4),没有break,参透case 3,继续执行y++(5),遇到break,退出switch,执行打印y=5;
面试题:选择结构if语句和switch语句的区别?
答:if语句和switch语句都能实现根据不同情况做出选择的目的。
switch适合判断固定值的时候用,if适合判断区间或范围的时候用。
面试题:在控制台输出所有的”水仙花数”。水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
答:
- public static void main(String[] args) {
- for(int i = 100;i<1000;i++){
- int a = i/100;
- int b = i/10 - a*10;
- int c = i%10;
- if((a*a*a+b*b*b+c*c*c)==i){
- System.out.print(i+" ");
- }
- }
- }
复制代码
面试题:for、while和do...while三种循环语句的区别?
答:do...while循环至少执行一次循环体,而for和while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
面试题:在控制台输出九九乘法表。
答:
- public static void main(String[] args) {
- for(int i=1;i<10;i++){
- for(int j=i;j<10;j++){
- System.out.print(i+"*"+j+"="+(i*j)+'\t');
- }
- System.out.println();
- }
- }
复制代码
面试题:return、break和continue 的区别?
答:return 是结束方法;break 是结束循环;continue 是终止本次循环,继续下次循环。 |
|