Java语法细节 - try_finally和set相关
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
Java语法细节 - try_finally和set相关的更多相关文章
- Java语法细节 - 内存和枚举
目录 Java申请DirectBuffer ByteBuffer的position,limit,capacity,flip操作之间的关系 枚举实现单例模式 Java申请DirectBuffer /*- ...
- Java语法细节 - 可见性
目录 JAVA访问和修饰符的关系一览表 JAVA访问和修饰符的关系一览表 Modifier Class Package Subclass World public Y Y Y Y protected ...
- JAVA语法细节(1)
1.变量的作用域 变量的作用域从变量定义的位置开始,到变量所在的那对大括号结束.变量定义内存开辟一块空间用于该变量,变量到达作用域时,该变量从内存中消失. 2.变量的数据类型 变量基本数据类型:byt ...
- Java语法细节 - synchronized和volatile
目录 synchronized关键字 关键字volatile synchronized关键字 synchronized关键字锁住方法和this的不同之处: public synchronized vo ...
- Java语法细节(2)
1.逻辑运算符 &和&&,|和||的区别 &&:和&的结果是一样的,但运算过程有区别 &&:只要左边结果为假,就不再执行右边的,结果为假 ...
- java优化细节记录
此处是为了记录一些优化细节,从网上收集而来,仅供后续代码开发参考使用,如发现更好的,会不断完善 首先确认代码优化的目标是: 减小代码的体积 提高代码运行的效率 代码优化细节 1.尽量指定类.方法的fi ...
- 程序员带你学习安卓开发,十天快速入-对比C#学习java语法
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- JavaScript语法细节——引用与复制
原文:JavaScript语法细节--引用与复制 我们都知道,JS中变量的赋值有两种方式,最近在折腾自己写的标签栏插件,碰到了很多平时没注意的问题.正好,那边处理清楚了,稍微整理一下关于引用与复制相关 ...
- Java语法知识总结
一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名为Java: ...
随机推荐
- redis 分布式锁流程图
- 服务器 隐藏php版本,nginx版本号等
隐藏php版本号: 打开php.ini配置文件 找到 expose_php 关键修改为 off 即可 重启后 web头部就不会有了 隐藏 nginx 服务器版本号: 打开nginx配置文件,在htt ...
- Shiro权限管理
1.简介 Apache Shiro是Java的一个安全框架,对比Spring Security,没有Spring Security功能强大,但在实际工作时可能并不需要那么复杂,所以使用小而简单的Shi ...
- python学习第30天
tcp协议的socket server 并发效果验证客户端的合法性socket模块还有一些其他的方法
- 在django中uwsgi的使用,以及安装
首先了解wsgi是一个python web服务器,uwsgi实现了wsgi所有的功能,性能稳定,效率高的服务器: 1.安装uwsgi pip install uwsgi 2.配置uwsgi [uwsg ...
- 基于keil平台下STM32L系列移植FreeRTOS操作系统
1,下载FreeRTOS https://www.freertos.org/a00104.html 点击下载后,会进入如下界面 之后会弹出下载界面,格式为.EXE,不用怀疑.不是木马. 等待下载完成, ...
- Springboot @Transactional Mysql事务 无效
JPA默认创建的表是MyISAM引擎,MyISAM引擎不支持事务操作 所以需要将将数据库引擎改为InnoDB 配置修改 spring.jpa.database-platform=org.hiberna ...
- CF1082
D 乱搞题..发现只有a[i]=1是特殊的 瞎搞一下 E 发现一段的贡献是出现次数最多的-为c个数 然后考虑分别对每种颜色做一下 然后每次只有这种颜色和他们之间是有用的 然后做个最大区间和就好了 F ...
- iOS webview 获取html中的图片地址
//js代码,声明1个数组,对img 进行遍历,采用,分割多个url NSString * getAllImages = @"var str = new Array();" &qu ...
- redis 集群 遇坑1
redis 集群 遇坑1 redis集群需要开2个端口 一个是客户端连接端口 一个是 集群总线端口 集群总线端口 是 客户端端口 + 10000 如 客户端端口是 6380 则集群总线端口 为 163 ...