• Java语法细节


    [TOC]

    try-catch-finally的关系

    ​ 在try-block中即使出现了异常,finally也会被执行,需要注意的是,如果在try-block中return的是引用类型,在finally中对该引用类型进行修改,会导致最终的return类型也被修改。

    try {
    
    //即使有return语句,finally也会被执行
    
    returnb;
    
    } catch (Exception e) {
    
    // TODO: handle exception
    
    }
    
    finally {
         System.out.println("finally block 会覆盖try中的return!");
         return 1000;    //不建议在finally中进行return,现在的编译器会对该行为发出警告信息,如果返回值为引用类型,那么finally中的操作还会改变预期的返回值
    
    }
    

    TreeSet和HashSet的实现原理和区别

    ​ 这两个实际上都是调用的TreeMap和HashMap来实现的,因为map的key值是唯一的,所以jdk便利用这一特性实现了set相关的功能

    BigDecimal中的一些坑

    ​ BigDecimal在构造方法中,传入Integer和String会表现出和预期不一样的结果,具体如下面的代码所示:

    BigDecimal one = new BigDecimal("1.0");    //有冒号,下面才会出现这种情况,无冒号则按照预期工作
    BigDecimal two = new BigDecimal("1.00");   //无冒号的话,会被退化为1
    System.out.println(one);   //=> 1.0
    System.out.println(two);   //=> 1.00
    
    //注意,是不相等的
    System.out.println("equals:" + one.equals(two));  //=> false
    
    //比较出来的结果是0,也就是相等
    System.out.println("compareTo:" + ((Comparable<? super BigDecimal>)one).compareTo(two));
    
    //也就是说,对于BigDecimal的equal和CompareTo方法,两者的表现是不一样的。
    

    当BigDecimal在HashSet/HashMap和TreeSet/TreeMap中使用时

    ​ HashSet/HashMap和TreeSet/TreeMap两者在比较的时候,使用了不同的方式,因此在Hash和Tree中,

    HashSet<BigDecimal> hashSet = new HashSet<BigDecimal>();
    hashSet.add(one);
    hashSet.add(two);
    System.out.println("HASHSET:" + hashSet);    // hashset里面会有one和two,因为hashset调用的是equals方法
    
    TreeSet<BigDecimal> treeSet = new TreeSet<BigDecimal>();
    treeSet.add(one);
    treeSet.add(two);
    
    System.out.println("TREESET:" + treeSet);   //但是treeset里面只有一个,因为treeset去重时使用的是compareTo
    
    //导致这样的结果根本原因是TreeMap和HashMap在加入key-value时对key的判断,TreeMap使用compareTo,但是HashMap使用的却是equals
    //注意BigDecimal的一些特殊行为:
    BigDecimal one = new BigDecimal("1.0")   =>实际值为1.0
    BigDecimal one = new BigDecimal(1.0)   =>实际值为1
    
  • 相关阅读:
    单张图片转PDF(基于Go语言实现)
    Django在前后端分离项目中,如何针对GET接口请求加入缓存机制
    Python3解决Nginx日志的中文乱码问题
    Python3通过Redis实现学生分数排行榜
    Jmeter之Json提取器用法收藏(非常给力的一篇!)
    H5和安卓的转义字符问题

    数组
    链表
    替换空格 JS算法题
  • 原文地址:https://www.cnblogs.com/seancheer/p/10708164.html
Copyright © 2020-2023  润新知