黑马程序员技术交流社区
标题: 资源共享,一些易错题供小伙伴们练练手 [打印本页]
作者: Normandy1943 时间: 2015-3-17 22:43
标题: 资源共享,一些易错题供小伙伴们练练手
一、/*
面试题:下面的语句有没有问题,如果有,请解释。
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
有问题,在byte b3 = b1 + b2;报错。
解释:
b1 + b2在参与运算的时候,首先会自动转换成int类型。
在这个时候,b1和b2其实都被提升了类型。所以,他们的计算结果也应该是int类型。
最终,就相当于直接把int类型赋值给byte类型,所以,会有精度的损失。
如果参与运算的是常量,编译器会先计算值,在看该值是否是左边能够表示的范围。如果是,就不报错。
*/
classVariableDemo4
{
public static void main(String[] args)
{
byte b1 = 3;
byte b2 = 4;
byte b3 = (byte)(b1 + b2);
byte b4 = 3 + 4;
System.out.println(b3);
System.out.println(b4);
}
}
二、
public class Test {
public staticvoid main(String[] args) {
int i = 1;
i = i++;//1
i=++i;//2
System.out.println(i);
}
}
①把变量i的值取出来,放在一个临时变量里(我们先记作temp);
②把变量i的值进行自加操作;
③把临时变量temp的值作为自增运算前i的值使用,
在本题中就是给变量i赋值。因此,经过以上三步操作以后,
虽然变量i在第②步操作中进行了自增运算,
但第三步操作以后又把原来的值赋给了它,故最后输出结果为1
三、
short s = 5;
//s = s + 2; //报错
s += 2;
System.out.println(s);
注意:
虽然a+=20和a=a+20效果等价,但是还是有些区别。
+=这种赋值运算符,其实隐含了强制类型转换功能。
也就是说:
short s = 5;
s+=2;
等价于
s = (short)(s+2);
四、
/*
面试题:
请自己实现两个整数变量的交换
注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
*/
class OperatorTest{
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
//方式1:使用第三方变量(开发中用的)
/*
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
System.out.println("------------");
*/
//方式2:用位异或实现(面试用)
//左边:a,b,a
//右边:a ^ b
/*
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println("a:"+a+",b:"+b);
*/
//方式3:用变量相加的做法
/*
a = a + b; //a=30
b = a - b; //b=10
a = a - b; //a=20
System.out.println("a:"+a+",b:"+b);
*/
//方式4:一句话搞定
b = (a+b) - (a=b);//b=30-20=10,a=20
System.out.println("a:"+a+",b:"+b);
}
}
-
-
Java练习题(试卷).pdf
286.53 KB, 下载次数: 107
作者: 超凡凡凡凡 时间: 2015-3-17 22:52
大神就是牛! 带我装X带我飞, 少林功夫就是好!!!
作者: Normandy1943 时间: 2015-3-17 22:53
应该在开个尼姑庵来:lol
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |