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;
short s=1;
s=s+1;//这里要报错,因为存在类型转换
然而+=就不出错
short s=1;
s+=1;
因此可以使用 += 与 i=i+1 的情况,推荐使用 +=,因为他有更好的性能且程序更加健壮。
System.out.println(false ? 10.9 : 9);
答案:打印出的是9.0。
原因:java会根据运算符的精度类型进行自动类型转换。有与前面有一个10.9,因此后面的9也会自动变成9.0.
在三目运算符中,当后两个表达式有一个是常量表达式时,另外一个类型时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);
};
移位运算符运算时,要先进行取模。例:
public static void main(String a[]) {
int num=32;
System.out.println(num>>32);
};
答案:0
原因:32取模为0,所以右移0位
此时,系统回去看是否有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
解析:是传值的。就拿特殊的来说,参数是引用类型时,传的是引用的副本。例:
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这个数组引用的副本,所以,改变副本的值不会影响原来引用指向的堆。
例子:
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;//不报错
}
例子:求下列代码的输出结果
public static void main(String args[]) {
System.out.println((int) 2.7);
}
答案:2
原因:java是向下取整的