zoukankan      html  css  js  c++  java
  • Java常见错误合集

    null 转基本类型

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    static class OneClass {
        private Double value;
    }
    
    @Test
    public void nullToPrimitive() {
        OneClass oneClass = new OneClass(1.0);
        double value = oneClass.getValue();
        System.out.println(value);
        OneClass oneClass2 = new OneClass();
        value = oneClass2.getValue();
        System.out.println(value);
    }
    
    null指针异常
    

    String.format中输出%

    @Test
    public void formatTest() {
        String str = "the fee rage is %.2f%%";
        System.out.println(String.format(str, 1.2));
    }
    
    the fee rage is 1.20%
    

    google cache null 指针

    @Test
    public void nullTest1() {
        LoadingCache<String, String> cache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).build(
                new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) throws Exception {
                        return null;
                    }
                });
        try {
            System.out.println(cache.get("str"));
        } catch (Exception e) {
            log.error("nullTest1 {}", e.getMessage(), e);
        }
    }
    
    报错:nullTest1 CacheLoader returned null for key str.
    

    修改后

    @Test
    public void nullTest2() {
        LoadingCache<String, Optional<String>> cache =
                CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).build(
                        new CacheLoader<String, Optional<String>>() {
                            @Override
                            public Optional<String> load(String key) throws Exception {
                                return Optional.ofNullable(null);
                            }
                        });
        try {
            System.out.println(cache.get("str").isPresent() ? cache.get("str") : null);
        } catch (Exception e) {
            log.error("nullTest2 {}", e.getMessage(), e);
        }
    }
    
    输出:null
    

    double相加精度问题

    @Test
    public void doubleAdd() {
        System.out.println(0.3 + 0.3 + 0.3 + 0.1);
        System.out.println(Double.compare(1.0, 0.3 + 0.3 + 0.3 + 0.1) == 0);
        BigDecimal bigDecimal1 = BigDecimal.valueOf(0.3)
                .add(BigDecimal.valueOf(0.3))
                .add(BigDecimal.valueOf(0.3))
                .add(BigDecimal.valueOf(0.1));
        BigDecimal bigDecimal2 = BigDecimal.valueOf(1.0);
        System.out.println(bigDecimal1.compareTo(bigDecimal2) == 0);
    }
    
    输出:
    0.9999999999999999
    false
    true
    

    contains 参数是object 类型不同

    @Test
    public void containsTest() {
        Set<Byte> set = Sets.newHashSet((byte) 1, (byte) 2, (byte) 3);
        System.out.println(set.contains(1));
        System.out.println(set.contains((byte) 1));
    }
    
    输出:
    false
    true
    

    Arrays.asList

    Integer[] integers = {0, 1, 2};
    List<Integer> list = Arrays.asList(integers);
    System.out.println(list);
    integers[0] += 1;
    System.out.println(list);
    
    输出:
    [0, 1, 2]
    [1, 1, 2]
    
    Arrays.asList 产生的ArrayList,它内部的数组直接沿用了这个数组,所以数组的修改,ArrayList也会相应的修改
    这个list不支持add和remove,支持set和get
    
    源码如下
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
    
    private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;
    
        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
    }
    

    未完待续……

  • 相关阅读:
    团体程序设计天梯赛 L2-011 玩转二叉树 (25分)
    团体程序设计天梯赛 L2-010 排座位 (25分)(并查集)
    团体程序设计天梯赛 L2-009 抢红包 (25分)
    团体程序设计天梯赛 L2-007 家庭房产 (25分)
    团体程序设计天梯赛 L2-014 列车调度 (25分)(最长上升子序列)
    团体程序设计天梯赛 L2-006 树的遍历 (25分)
    团体程序设计天梯赛 L2-008 最长对称子串 (25分)
    团体程序设计天梯赛 L2-005 集合相似度 (25分)
    uva11401(Triangle Counting)
    UVA
  • 原文地址:https://www.cnblogs.com/eaglelihh/p/13960467.html
Copyright © 2011-2022 走看看