1、为何使用equals比较时,要把常量放在左边?
String str = null;
if(str.equals("xxx"))
{
//do xxx
}
可以看出,当str为null时,会导致空指针异常。
2、对List foreach时候,循环体中不能修改list结构
import java.util.ArrayList;
import java.util.List;
public class TestList {
public static void main(String[] args) {
List<Person> pers = new ArrayList<Person>();
Person p1 = new Person("zhangsan", 20);
Person p2 = new Person("wangwu", 21);
Person p3 = new Person("lisi", 22);
Person p4 = new Person("zhaoliu", 22);
pers.add(p1);
pers.add(p2);
pers.add(p3);
pers.add(p4);
for(Person p : pers)
{
if("wangwu".equals(p.getName()))
{
pers.remove(p);
}else if("lisi".equals(p.getName()))
{
pers.remove(p);
}
}
System.out.println(pers.size());
}
}
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at TestList.main(TestList.java:18)
3、在重写父类方法时,子类方法不能抛出比父类更大的异常。
4、System.out.println(1==2?9.9:9); 打印的结果是多少?
输出结果为: 9.0
5、后加加问题
int i = 3;
System.out.println(i);
System.out.println(i++);
System.out.println(i);
输出结果为: 3 3 4
6、double陷阱
double b = 7/4;
System.out.print(b);
输出结果为: 1.0
double b = 7/4d;
System.out.print(b);
输出结果为: 1.75
7、int相乘转long
2个int类型相乘在转换long是有隐患的,可以先转long再相乘。
8、乘法陷阱
Javascript代码
<script> alert(10.2 * 100); alert(10.3 * 100); </script>
输出真的和你预期相同吗?Java也同样存在这种问题,如果double相乘必须经过处理。