1.Caused by: java.lang.ArithmeticException: / by zero
这个其实很少遇到,只有初学的时候会。
- int a = 1;
- int b =0;
- int c = a/b;//报错
2.substring 空指针
一个不注意经常碰到
- String str = null;
- str.substring(0,10);//报错Caused by: java.lang.NullPointerException
3. String 与Long 用equals判断相等
碰到过,贼尴尬。
- String a ="123";
-
- Long b = 123L;
-
- if(a.equals(b)){
- System.out.println("a等于b");//错
- }
4.Integer 用==判断相等
这个以前也会碰到,不注意就直接用 ==,现在几乎不会再犯这个错了。
- Integer a = 128;
- Integer b = 128;
- if (a == b) {
- System.out.println("a等于b"); //错
- }
5. switch..case忘记加break
这个粗心的话会碰到,不过不多。
- int i = 1;
- int num =0;
- switch (i) {
- case 0:
- num++;
- case 1:
- num++;
- case 2:
- num++;
- break;
- default:
- System.out.println(3);
-
- }
- System.out.println("预测输出结果为1-----》正确答案:"+num);//正确为2, case 1忘记加break;
6. try和finally都加return,finally为准
这个只是玩玩的,正常代码谁这么写??
- public class Test {
- public static int test(){
- try {
- return 0;
- } catch (Exception e) {
- }finally{
- return 1;
- }
- }
-
- public static void main(String[] args) {
- System.out.println(test()); // 1
- }
- }
7. list空指针
这个是个常见的bug
- List
list = null;//业务查询 - for (String s : list) {
- }
- 改成
- class ListUtil{
- public List<> nvlList( list){
- return list ==null ?new ArrayList<>() : list;
- }
- }
- 改成:
- for (String s : ListUtil.nvlList(list)) {
- }
8. list移除元素
常见。
- for(String s:list){
- list.remove(s);//java.util.ConcurrentModificationException
- }
-
- for(int i=0;i
- list.remove(i);//下标不会随着改变,会导致错误
- }
改成:
- 方式1:
- for(Iterator
it=list.iterator();it.hasNext();){ - it.remove();//用迭代器删除,不用用list的remove方法
- }
- 方式2:
- for(int i=0;i
- list.remove(i);
- i=i-1;//重置下标
- }
- 方式3:(jdk8) 移除元素 2
- List
list = new ArrayList<>(); - for (int i = 0; i < 5; i++) {
- list.add(i);
- }
- List
newList = list.stream().filter(o -> o != 2).collect(Collectors.toList()); - System.out.println(newList);
9. 重复迭代器移除元素报错,大坑,推荐 list.stream().filter
也是常见,蛮尴尬的,不过犯过错应该就不会再犯了。
- List
list = new ArrayList<>(); - for (int i = 0; i < 5; i++) {
- list.add(i);
- }
- Iterator
it = list.iterator(); - while(it.hasNext()){
- it.remove();
- it.remove();//重复移除就会报错
- }
10. Arrays.asList()转化的list,不能增删,java.lang.UnsupportedOperationException
可能会碰到,工作中没遇到。
- Integer[] arrs = {1,2,3,4};
- List
list = Arrays.asList(arrs); - list.add(5);//错误,此时返回的list是静态内部类,只能查询不能增删。
11. List<对象>,对象属性值改变,list中的对象也改变
由于add 和addAll方法添加的是对象的引用,因此,如果对象发生改变,那么list也会改变。
- void test1(){
- List
list = new ArrayList<>(); - Student stu = new Student();
- stu.setName("a");
- list.add(stu);
- test2(list);
- System.out.println(list.get(0).getName());//此时打印的结果是“b”,而不是“a”
- }
- void test2(List
list) { - for(Student s : list){
- s.setName("b");
- }
- }
12.listmap 别以为map.clear();就可以重新 list.add(map);了
脑抽的时候会转不过弯。
- List
- Map
map = new HashMap<>(); - map.put("id", 1);
- list.add(map);
- map.clear();//这是没用的,引用没变,所以后面再添加,也是同一个map,要改成map = new HashMap<>();
- map.put("id", 2);
- list.add(map);
- System.out.println(list);
- //结果: [{id=2},{id=2}]
-
相关阅读:
Java 中通过 key 获取锁
AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读
Qt的定时器QTimer
你还不懂java的日志系统吗
Java架构师系统架构设计原则
【Spring IOC/DI】bean 的 5 种注册 与 5 种注入
C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组
C++ 学习系列 -- std::vector (未完待续)
华为OD机考:0030-0031-n*n数组中二进制的最大数、整数的连续自然数之和
[Swift]定义一个全局的可管理的计时器
-
原文地址:https://blog.csdn.net/x18094/article/details/126445775