获得徽章 0
@java李杨勇、@墨理学AI,新的一天,来一起学习在开发中最常遇到的问题吧! 问题:Integer类型比较,猜猜下面返回什么结果 public static void test3(){ Integer a = 127; Integer b = 127; Integer c = 128; Integer d = 128; System.out.println(a == b); System.out.println(c == d); System.out.println(c.equals(d)); } 解答:答案是true、false、true,你猜对了? 为什么会出现这样的结果呢,因为是Integer缓存了-128到127的数值,当使用"=="比较符时,实际上比较的是两个对象的地址,因为Integer将-128到127的数值都进行了缓存,所以在这个范围内的相同的两个值无论是使用==还是equals比较结果都是true,因为它们是直接取的缓存中的值,但是不在这个范围内的话,则返回的是false。 缓存源码:【图1】 当使用的是equals方法比较时,不在这个范围内的相同的两个值返回的结果也是true,因为Integer内部重写了equals方法,该方法比较的是两个对象的中的值而不是地址。 建议:使用包装类比较值时,不要使用"==",而应该使用equals方法。
展开
IT学习日记v于2022-01-19 08:53发布的图片
评论
赞了这篇沸点
@java李杨勇、@IT学习日记v 1到100求和、 python 一行代码实现;你们有遇到这样的面试题目吗 python 一行代码实现(考点) [捂脸] print(sum(range(1, 101))) #沸你不可#
展开
墨理学AI于2022-01-17 20:29发布的图片
评论
@java李杨勇、@墨理学AI,新的一天,来一起学习在开发中最常遇到的问题吧! 二、使用增强for循环删除元素,猜猜下面代码会输出什么? List<String> list = new ArrayList<>(); list.add("淘宝"); list.add("淘宝"); list.add("掘金"); for(String item : list) { if("淘宝".equals(item)) { list.remove(item); } } 解答:直接抛出ConcurrentModificationException异常,其实增强for循环只是一个语法糖,方便开发者使用,在虚拟机实际的被执行的时候是通过迭代器的方式循环,对上面的代码进行反编译得到如下代码:【图1】 为什么使用迭代器循环方式在循环的时候删除元素会抛出这个异常呢?实际上,迭代器在每次调用next()方法的时候,第一步就会先去执行checkForComodification()方法,这个方法的目的就是检查list下的modCount是否和expectedModCount变量的值一致(可以理解为版本号),如果不一致,则直接抛出ConcurrentModificationException异常。 删除的流程是这样的呢?实际上modCount变量表示的含义是集合被修改的次数,每次对集合进行add或者remove的时候,则会对它进行+1,在调用集合的remove方法时,该变量的值会被加1,但是expectedModCount的值却没有变动,此时,当再次执行next方法时判断则两者值不相等,于是抛出异常。【图2】 解决方案:使用迭代器的remove方法,即将上面删除的代码修改为: iterator.remove(),在迭代器的remove方法中,会将modCount的值赋值给expectedModCount,所以在下次执行next方法的时候,两者的值还是一样的,就不会抛出异常。 因为沸点字数有限制,更多原因请看:【图3】分析
展开
IT学习日记v于2022-01-18 08:15发布的图片
IT学习日记v于2022-01-18 08:15发布的图片
IT学习日记v于2022-01-18 08:15发布的图片
1
IT学习日记v的头像
公众号: IT学习日记
@java李杨勇、@墨理学AI,新的一天,来一起学习在开发中最常遇到的问题吧! 一、常见的集合删除元素问题:使用for循环匹配某个元素,然后删除,猜猜下面代码输出的会是什么? public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("淘宝"); list.add("淘宝"); list.add("掘金"); for (int i = 0; i < list.size(); i++) { if ("淘宝".equals(list.get(i))) { list.remove(i); } } System.out.println(list); } 解答:输出【淘宝、掘金】,本意我们是想删除集合中为“淘宝”的元素,但是因为在循环中使用到list的remove方法,这样一旦有元素被移除后,集合的size会变小,这样原本的元素左边就会改变,最终循环提前退出,具体可看下面图纸解析: 解决方案: 方式1:在调用remove方法后添加:i--,让下一轮坐标重新回到删除元素的前一个(因为这样删除会让被删除元素之后的元素左边都往前移一位) 方式2:使用java8提供的removeIf API,完整代码:list.removeIf(e -> “淘宝”.equals(e)) 即可实现。
展开
IT学习日记v于2022-01-17 08:29发布的图片
7
#掘友年度报告# 2022,not to do: 不要再经常熬夜,做事不要再犹犹豫豫,想做的事情就去做
IT学习日记v于2022-01-14 23:51发布的图片
评论
#沸你不可# 掘金的春节礼物真的很用心了!2022一起冲
IT学习日记v于2022-01-14 20:00发布的图片
IT学习日记v于2022-01-14 20:00发布的图片
7
IT学习日记v的头像
公众号: IT学习日记
摸鱼是为了更好的学习!
评论
#掘友年度报告# 2021遇到掘金是最好的安排,往后希望能够输出更多优质文章!回馈更好的掘友和社区!2022一起冲!
IT学习日记v于2022-01-10 21:42发布的图片
评论
IT学习日记v的头像
公众号: IT学习日记
下一页
个人成就
文章被点赞1,132
文章被阅读49,540
掘力值1,627
收藏集
2
关注标签
18
加入于