最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们:
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
输出结果
1.000999999999999889865875957184471189975738525390625
1.00100004673004150390625
这个结果是不是跟我们所期望的1.001有点不一样。
float和double可以用于工程计算科学计算,他们会有精度丢失,这是由于浮点运算器的结构导致的,但是在金融领域一旦精度出现问题就意味着可能是严重的现实经济损失,所以普通的那些数值型一般不会在这个场景下使用。
所以涉及金钱的计算一定不要使用float和double。使用BigDecimal并且一定要用String来构造。 上面的列子我们可以这样来初始化 new BigDecimal(“1.001”)。
进行除法运算时必须要设置保留小数位
BigDecimal a = new BigDecimal(“1”);
System.out.println(a.divide(new BigDecimal(3)));
输出
Exception in thread “main” java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1690)
at com.workit.demo.antisper.Test.main(Test.java:11)
解决办法:使用如下两个函数设置精度
- divide(num, scale)
- divide(num, scale, roundingMode)
BigDecimal a = new BigDecimal(“1”);
System.out.println(a.divide(new BigDecimal(3), 2,BigDecimal.ROUND_HALF_UP));
字符串分隔(别忘了转义)
String str = “java|php|c++”;
String[] split = str.split(“|”);
for(String s:split){
System.out.println(s);
}
输出结果
j
a
v
a
|
p
h
p
|
c
+
+
结果并不是我们所期待的,java、php、c++。
解决办法我们对|进行转义分割,代码改为 String[] split = str.split(“|”);结果就正确了。
String的split方法需要转义的字符串:. $ | ( ) [ { ^ ? * + \ 共12个特殊字符,遇到以这些字符进行分割字符串的时候,需要在这些特殊字符前加双反斜杠\ \。
Arrays.asList 需要谨慎使用
下面列举一些常用但是却与我们所期待的结果不一样的用法。
将基本类型数组作为asList的参数
int[] array = {1,2,3};
List list = Arrays.asList(array);
System.out.println(list.size()); //1
输出的结果是1不是3哦是不是跟想象的有点不一样?原因如下:
由于Arrays.ArrayList参数为可变长泛型,而基本类型是无法泛型化的,所以它把int[] array 数组当成了一个泛型对象,所以集合中最终只有一个元素array 。
将数组作为asList参数后,修改数组或List
String[] array = {“欢”,“关”,“java”};
List list = Arrays.asList(array);
array[0] =“修改数组第一个元素”;
list.set(2,“修改集合第三个元素”);
System.out.println(Arrays.toString(array));
System.out.println(list.toString());
输出结果
[修改数组第一个元素, 关, 修改集合第三个元素]
[修改数组第一个元素, 关, 修改集合第三个元素]
是不是也与我们所期待的不一样。修改了数组奥了的值居然影响到了集合里面的值。原因如下:
由于asList产生的集合元素是直接引用作为参数的数组,所以当外部数组或集合改变时,数组和集合会同步变化,这在平时我们编码时可能产生莫名的问题。
数组转换为集合后,进行增删元素。
String[] array = {“欢”,“关”,“java”};
List list = Arrays.asList(array);
list.add(“java”);
System.out.println(list.toString());
输出结果:
Exception in thread “main” java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
抛出异常原因:由于asList产生的集合并没有重写add,remove等方法,所以它会调用父类AbstractList的方法,而父类的方法中抛出的却是异常信息。
当我们使用Arrays.asList 产生的集合时候,需要谨慎的去使用。如果需要对集合进行操作的时候我们可以通过 List list = new ArrayList(Arrays.asList(array)); 来进行使用。
currenHaseMap注意 key和value的null值
String key = “java”;
Map<String,Object> map = new ConcurrentHashMap<>();
map.put(“1”,“2”);
map.put(key,null);// Exception in thread “main” java.lang.NullPointerException
总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。
Mybatis源码解析
总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**