Java面试宝典易错题

文章目录

      • 1 j=j++问题。
      • 2 +=与i=i+1的运行机制不一样。
      • 3 三目运算符“?:”(运算符的精度类型)
      • 4 三目运算符的“?:”编程规范。
      • 5 移位运算符
      • 6 程序运行try或catch是遇到return或者throw语句情况。
      • 7 java是传值,还是传引用。
      • 8 java中byte,char,short的加、减、乘、除、取余运算会自动转为int类型,所以会报Type mismatch: cannot convert from int to byte错误。
      • 9 java是向下取整数的

1 j=j++问题。

public class temp 
{
	public static void main(String args[]) throws CharacterCodingException
	{
		int j=2;
		j=j++;
		System.out.println(j);
		
	}
}

答案:j的值是2;
原因:因为java用了中间缓存变量的机制,j=j++可换成下面写法:

temp=j;
j=j+1;
j=temp;

2 +=与i=i+1的运行机制不一样。

short s=1;
s=s+1;//这里要报错,因为存在类型转换

然而+=就不出错

short s=1;
s+=1;

因此可以使用 += 与 i=i+1 的情况,推荐使用 +=,因为他有更好的性能且程序更加健壮

3 三目运算符“?:”(运算符的精度类型)

System.out.println(false ? 10.9 : 9);

答案:打印出的是9.0。
原因:java会根据运算符的精度类型进行自动类型转换。有与前面有一个10.9,因此后面的9也会自动变成9.0.

4 三目运算符的“?:”编程规范。

在三目运算符中,当后两个表达式有一个是常量表达式时,另外一个类型时T时,而常量表达式可以被T表示时,输出结果是T类型。例子:

public static void main(String a[]) {
		System.out.println(false ? 10.9 : 9);
		char x='x';
		int i=10;
		System.out.println(false?i:x);
		System.out.println(false?10:x);
		System.out.println(true?121:x);
	};

答案:
在这里插入图片描述

5 移位运算符

移位运算符运算时,要先进行取模。例:

public static void main(String a[]) {
		int num=32;
		System.out.println(num>>32);
		
	};

答案:0
原因:32取模为0,所以右移0位

6 程序运行try或catch是遇到return或者throw语句情况。

此时,系统回去看是否有finally块,如果没有,立即执行try或catch中的return语句或throw语句;有,如果finally块有return 或throw语句,则不会跳会try和catch的return语句了,否则,执行完finally语句后会跳会到try或catch的return语句。

public static void main(String a[]) throws Exception {
		System.out.println(b());

	};

	public static int b() {
		int a = 3;
		try{
			return a;//这里会先把a的值保存起来相当于return 3,
		}
		finally {
			a=4;
		}	
	}

答案:3
原因:return a时,相当于return 3

public static void main(String a[]) throws Exception {
		System.out.println(b());

	};

	public static int b() {
		int a = 3;
		try{
			return a;
		}
		finally {
			a=4;
			return a;//此时不会返回try中的return 语句
		}	
	}

答案:4

7 java是传值,还是传引用。

解析:是传值的。就拿特殊的来说,参数是引用类型时,传的是引用的副本。例:

public static void main(String args[])  {
		int a[]={2,2};
		b(a);
		System.out.println(a.length);

	};

	public static int [] b(int [] a) {		
	 int d[]={3,3,3};
	 a=d;
	 return a;
	}

答案:输出结果是2
原因:传引用时,传的是a这个数组引用的副本,所以,改变副本的值不会影响原来引用指向的堆。

8 java中byte,char,short的加、减、乘、除、取余运算会自动转为int类型,所以会报Type mismatch: cannot convert from int to byte错误。

例子:

public static void main(String args[]) {
		final byte b1=6;
		byte b2=3,b3=4,b4;
		byte b5=6;
		b4=(b2+b5);加会报Type mismatch: cannot convert from int to byte错误
		b4=b2-b5;减会报Type mismatch: cannot convert from int to byte错误
		b4=b2*b5;乘会报Type mismatch: cannot convert from int to byte错误
		b4=b2/b5;除会报Type mismatch: cannot convert from int to byte错误
		b4=b2%b5;//会报Type mismatch: cannot convert from int to byte错误
		++b2;//不报错
		--b2;//不报错
}

9 java是向下取整数的

例子:求下列代码的输出结果

public static void main(String args[]) {
		System.out.println((int) 2.7);
	}

答案:2
原因:java是向下取整的

你可能感兴趣的:(java语言)