转载:http://blog.sina.com.cn/s/blog_ec9857160102vyj0.html
一:同一个Scanner对象,如果先获取数值,再获取字符串会出现一个小问题,因为获取完数值后需要按回车键,而回车键本身是一个字符串。 解决办法有两种。第一,重新定义Scanner对象。第二,把所有的数据都用字符串获取,然后在进行相应的转换。
二:
short s=1; s=s+1;
short s=1; s+=1;
第一段代码是有错误的,因为这样会损失精度。s+1是int类型。要解决这个问题需要强制类型装换,即改为s=(short)(s+1);
第二段代码是没有问题的,因为扩展的赋值运算符其实隐含了一个强制类型装换,s+=1等价于s=(s的数据类型)(s+1);
三:四种方式实现两个变量的交换
方法一:采用临时变量。(这个就不用多说了)
方法二:用位异或运算符 (位异或运算符,将数转换为二进制,然后位相同的为0,不同的为为1)
a=a^b; b=a^b; //a^b^b=a a=a^b; //a^b^a=b
方法三:用变量相加的做法(a=20;b=10)
a=a+b; //a=20+10=30 b=a-b; //b=30-10=20 a=a-b;//a=30-20=10
方法四:(一句话搞定)b=(a+b)-(a=b);
四:最有效的方式计算出2乘以8:2<<3;
五:switch可以是byte型,不可以是long型,JDK7以后可以是String类型
六:for和while的区别 for适合一个明确次数的判断
while适合不明确的
七:float f1=1.234f 和float f2=(float)1.234的区别在于f1其实是通过一个double类型转换过来的,而f2本身就是一个float类型,通常会用第二种方法
八:代码 byte b1=1; byte b2=2; byte b=b1+b2; b=3+4;
这段代码其实是有问题的,因为变量相加,会首先看类型,然后把结果结果赋值时也会看类型。上面b1+b2的结果是int类型。所以会出错
而b=3+4是常量相加,首先会做加法,然后看结果是否在赋值的数据类型范围内,如果不在,就会报错。
九:byte b=130;
因为byte的取值范围在-128到127之间,而130不在这个范围内,所以会报错。我们可以使用强制类型装换。byte b=(byte)130的结果为 130-256=-126,相当于用强转的数据-256