java陷阱
1.奇数判断:
return i%2==1;
奇数可以是负数。
return i%2!=0;
2.浮点数相减:
system.out.println(2.0-1.1);//实际输出0.899999999999999
system.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.1")));//输出0.9
system.out.printf("%.1f",2.0-1.1);//输出0.90
3.长整除
final long A=24*60*60*1000*1000 //微秒
final long A=24*60*60*1000* //毫秒
system.out.println(A/B);//输出5
int 越界
final long A=24L*60*60*1000*1000 //微秒
final long A=24L*60*60*1000* //毫秒
system.out.println(A/B);//输出1000
4.互换内容
int x = 1984;
int y = 2001;
x^ = y^=x^=y;//c语言语法可实现交换
int x = 1984;
int y = 2001;
y = (x^ = (y^ = x))^y;//java语言语法可实现交换
5.字符串相加
system.out.println("H"+"a");//输出Ha
system.out.println("H"+"a");//输出169
String letters = "ABC";
char[] number ={"1","2","3"}
system.out.println(letters+"easy as"+numbers);//输出ABC easy as [C@c17164 打印的是数组的hashcode
system.out.println(numbers);//打印123
println是重构的方法
String letters = "ABC";
char[] number ={"1","2","3"}
system.out.print(letters+"easy as")
system.out.println(numbers);
//输出ABC easy as 123
6.Unicode编码:
system.out.println("a/u0022.length()+/u0022b".length());//输出2
/u0022是转义字符
system.out.println("a".length()+"b".length()); //2
7.随机数:
public class RandomTest {
private static Random rnd = new Random();
public static void main(String[] args) {
StringBuffer word = null;
switch(rnd.nextInt(3)) {
case 1: word = new StringBuffer('P');break;
case 2: word = new StringBuffer('G');break;
default: word = new StringBuffer('M');
}
word.append('a');
word.append('i');
word.append('n');
System.out.println(word); //总会输出ain,不会出现P ,G ,M
}
}
StringBuffer('p')中" 'p' "会转成int的ascii码,即StringBuffer(int capacity),是初始化StringBuffer的容量
将PGM中改为""即可
8.增量操作:
int j = 0;
for(int i=0;i<100;i++){
j=j++; //需修改
system.out.println(j);//输出0
}
system.out.println(j);//输出0
修改:
j++;
++j;
j = ++j;
都可实现
9.整数边界问题:
public class WhileTest {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count); //死循环,输出很大的负数
}
}
原因:START增加到Integer.MAX_VALUE时又加了一,所以就从最大值变成最小的负数
将i<=END 中的"="去掉
10.计数器问题:
public class Clock {
public static void main(String[] args) {
int minutes = 0;
for (int ms = 0; ms < 60*60*1000; ms++)
if (ms % 60*1000 == 0)
minutes++;
System.out.println(minutes);//输出60000
}
}
//运算符优先级,修改 if (ms %( 60*1000) == 0)
11.try -finally
public class ReturnValue {
public static void main(String[] args) {
System.out.println(decision());
}
public static boolean decision() {
try {
return true;
} finally {
return false;
}
}
} //输出false; finally必须要执行,所以不要在finally中返回
public class GoodBye {
public static void main(String[] args) {
try {
System.out.println("Hello world");
System.exit(0);
} finally {
System.out.println("Goodbye world");
}
}
} //会输出"Goodbye world"?,没有,输出"Hello world",退出。
//说明在程序正常运行的时候,finally会执行,但是如果有中断,就不会
posted on 2011-06-11 10:16 android开发实例 阅读(259) 评论(0) 编辑 收藏 举报