在Java中==的一个坑】的更多相关文章

观察下面代码,输出结果是什么? public static void main(String[] args) { Integer p = 10000; Integer q = 10000; System.out.println(p == q); System.out.println(p.equals(q)); } 运行一次,答案与预想的完全不一样.在比较数字的时候,一定要用euqals,不能用==c 查看Integer的jdk源码,发现如下片段: /** * Cache to support t…
这里记录编译过程中的一个坑!!! 编译过程中出现了下面的报错 external/doclava/src/com/google/doclava/ClassInfo.java:20: error: package com.sun.javadoc does not exist 大概出现了140多个错误,网上查到的解决办法是 bad: export PATH=/home/rev/BIN/jdk-6u34/jdk1.6.0_34/bin/:$PATH Good: export PATH=/home/rev…
如何在JAVA中实现一个固定最大size的hashMap 利用LinkedHashMap的removeEldestEntry方法,重载此方法使得这个map可以增长到最大size,之后每插入一条新的记录就会删除一条最老的记录. import java.util.LinkedHashMap; import java.util.Map; public class MaxSizeHashMap<K, V> extends LinkedHashMap<K, V> { private fina…
OGNL(英文全称:Object Graph Navigation Language,中文名:对象导航图语言)是应用于Java中的一个开源的表达式语言(Expression Language),它被集成在Struts2等框架中,作用是对数据进行访问,它拥有类型转换.访问对象方法.操作集合对象等功能.…
直接上代码: import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Optional; import java.util.function…
记状态管理库Akita中的一个坑 Akita是什么 Akita是一种基于RxJS的状态管理模式,它采用Flux中的多个数据存储和Redux中的不可变更新的思想,以及流数据的概念,来创建可观察的数据存储模型. 无论是Angular.React.Vue.Web组件,还是普通的旧式JS,秋田都可以完成繁重的工作,并作为维护干净.无样板.可伸缩的应用程序的有用工具. Akita基于面向对象的设计原则,而不是函数式编程,因此具有OOP经验的开发人员应该感到很熟悉.它您的团队提供了一个不可偏离的固定模式.…
目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今天我们介绍一下怎么自定义一个Collector. Collector介绍 我们先看一下Collector的定义: Collector接口需要实现supplier(),accumul…
怎么在java中关闭一个thread 我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程.那么怎么关闭这个线程呢? 有人会说可以用Thread.stop()方法.但是这个方法已经被废弃了. 根据Oracle的官方文档,Thread.stop是不安全的.因为调用stop方法的时候,将会释放它获取的所有监视器锁(通过传递ThreadDeath异常实现).如果有资源该监视器锁所保护的话,就可能会出现数据不一致的异常.并且这种异常很难被发现. 所以现在…
最近准备换工作,为了少让人家鄙视,就要狠狠地藐视这些面试题目.找了本电子书,发了有好多坑,都是特别简单,但是很少有人做对的题目.面对这样的题目,我却有一种兴奋的感觉,也许是因为一直做着重复的工作没有新鲜感了,偶尔掉坑了还自得其乐来着.好了,言归正传,待我细细说来,欢迎拍砖啊. 1.坑1,关于三目运算符 先看题目:char x = 'x';System.out.println(true?120:x);请问输出结果是什么? 我想大多数人的结果是120,而且还用很蔑视的态度回答,先不用着急,三目运算符…
计划任务功能在应用程序及其常见,使用Spring Boot的@Scheduled 注解可以很方便的定义一个计划任务.然而在实际开发过程当中还应该注意它的计划任务默认是放在容量为1个线程的线程池中执行,即任务与任务之间是串行执行的.如果没有注意这个问题,开发的应用可能出现不按照设定计划执行的情况.本文将介绍几种增加定时任务线程池的方式. 验证Spring Boot计划任务中的"坑" 其实是验证Spring Boot 中执行任务的线程只有1个.先定义两个任务,输出任务执行时的线程ID,如果…
Calendar 类是一个抽象类,为日历字段之间的转换提供了一些方法.其中有一个重要方法 getActualMaximum ,该方法用于返回指定日历字段实际的最大值. 利用这个方法(Calendar.getActualMaximum),我们可以获得某年某月的天数. 代码如下: /** * 获得某个月最大天数 * * @param year 年份 * @param month 月份 (1-12) * @return 某个月最大天数 */ public int getMaxDayByYearMont…
在javascript中有一个方法isDigit()使用来判断一个字符串是否都是数字,在java的字符串处理方法中没有这样的方法,觉得常常需要用到,于是上网搜了一下,整理出了两个用正则表达式匹配的判断方法,如下: // 判断一个字符串是否都为数字 public boolean isDigit(String strNum) { return strNum.matches("[0-9]{1,}"); } // 判断一个字符串是否都为数字 public boolean isDigit(Str…
在某技术群看到这样的一个面试题目: 这是一个4年经验的java 从业者的答案. 你的答案是什么呢? 正确的答案是true. 为什么? 其实当使用String a="a"+"b"+1;时,程序会建立一个String缓冲池(String pool):把a放入:当再次使用Stirng b="ab1";程序首先会在这个String缓冲池中寻找相同值的对象;找到了a,然后a,b引用了相同的值的对象. 我们可以查找到很多相关与String pool的资料.…
今天有人问我怎么增强一个类的功能.博客刚好没东西,今天就讲讲增强类. 增强的手段有三种类型: 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但增强内容不可变. 3.动态代理:特点是被增强对象可变,增强内容可变. 下面是三种对a对象进行增强的手段:  继承:AA类继承a对象的类型:A类,然后重写fun1()方法,其中重写的fun1()方法就是被增强的方法.但是,继承必须要知道a对象的真实类型,然后才能去继承.如果我们不知道a对象的确切类型…
因项目需求变动,我必须在coredata中的WorkLogModel表中添加一个字段:抄送人.起初我给这个字段起名为copyPerson,一切准备就绪后,发现从数据库读取这个copyPerson时,第一次使用没问题,但第二次使用程序就会崩溃.报出的的错误是:将消息发送给了一个已经释放的对象!意思是说,第一次使用copyPerson后,这个对象就被释放了,所以第二次再次使用它就会报出这种内存错误.真是百思不得其解!!!明明用的是ARC啊!!! 第二个星期,我再次抽出时间研究这个问题,看着这个cop…
说一个极有可能在工作中遇到的问题——foreach的引用 foreach $arr = range(1,3); //[1,2,3] foreach($arr as &$val) { } foreach($arr as $val) { } print_r($arr); 上面这段代码输出什么呢,神奇的竟然是下面这样,这个我在工作中遇到过一次,当时弄了半天没弄出个所以然,只是找到了解决办法,这个问题解决办法有两个: Array ( [0] => 1 [1] => 2 [2] => 2…
一.Object转Integer Java中hibernate或者ResultSetHandler查询sql语句, 返回的object类型其实是Long类型, 而不是Integer类型, 因此此时直接将返回的Object转换为Integer类型会抛出类型转换的错误. 我们必须先将其转换为Long类型, 再转换为Integer类型. //int count = ((Integer)query.uniqueResult()).intValue(); //改成 int count = ((Number…
最近公司新来了一个小伙伴,问了磊哥一个比较"奇怪"的问题,这个问题本身的难度并不大,但比较"隐蔽",那究竟是什么问题呢?接下来我们一起来看. ​ 起因 最近公司的系统要增加一个新的列表展示功能,功能本身难度并不大,但遇到了一个很"可怪"的问题.小伙伴在执行查询列表时,明明已经使用了 order by 进行排序了,但最终查询出来的数据却还是乱的. ​ 预期中的(正确)结果: 现实中的(非预期)结果: 那到底是哪里出现了问题呢? 问题展示 为了方便展…
其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力, 就需要实现Cloneable接口,重写clone方法.通过克隆方法得到的对象是一个本地的副本. 1.实现Cloneable接口 具体看代码: class User implements Cloneable{ int age; public User(int age){ //用this关键字不至于类成员变量与形参混淆 this.age=age; } //这…
java将一个list里的数据转移到另外一个list,可以使用for语句,一次使用add方法,示例如下: ArrayList list1=new ArrayList(); list1.add("1"); list1.add("2"); list1.add("3"); ArrayList list2=new ArrayList(); list2.add("4"); for(int i=0;i<list1.size();i+…
线程安全总是与多线程有关的,即一个线程访问或维护数据时遭到了其它线程的“破坏”,为了不被破坏,就要保持所维护变量的原子性: 1 局部变量总是线程安全的,因为每个线程都有自己的栈,而在方法中声明的变量都是放在栈中,用完即被释放内存. 2 使用传统的多线程关键字synchronized,加在非静态方法上意即同一对象在该方法上是线程安全的:加在静态方法上,整个类在该方法上都是安全的. 3 使用java.util.concurrent.atomic.…
首先看下Java语言规范对equals方法的要求: 1,自反性,对于任何非控引用x,x.equals(x)都应该返回true. 2,对称性,对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true. 3,传递性,如果x.equals(y),y.equals(z)都返回true,那么,x.equals(z)返回true. 4,一致性,如果x和y引用的对象没有发生变化,那么无论调用多少次x.equals(y)都返回相同的结果. 5,对于任意非空引用x,…
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 今天,分享一个JDK中令人惊讶的BUG,这个BUG的神奇之处在于,复现它的用例太简单了,人肉眼就能回答的问题,JDK中却存在了十几年.经过测试,我们发现从JDK8到14都存在这个问题. 大家可以在自己的…
基本数据类型 浮点数存在误差 浮点数有一个需要特别注意的点就是浮点数是有误差的,比如以下这段代码你觉得输出的什么结果: public class Demo { public static void main(String[] args) { System.out.println(0.1+0.2 == 0.3);//输出false } } 这段代码输出值是false,之所以是这个结果那是因为浮点数是存在误差的,也就yi是说0.1在计算机中存储时不是精确的0.1,而有可能是0.1000000001,…
今天,分享一个JDK中令人惊讶的BUG,这个BUG的神奇之处在于,复现它的用例太简单了,人肉眼就能回答的问题,JDK中却存在了十几年.经过测试,我们发现从JDK8到14都存在这个问题. 大家可以在自己的开发平台上试试这段代码: public class Hello {      public void test() {          int  i = 8;          while  ((i -= 3) > 0);          System.out.println("i = …
现总结几种生成一个唯一值的方式 第一种:采用nanoTime() // 理论上存在重复的可能,可以在后面再加上一个随机字符串 Random r = new Random(); for (int i = 0; i < 100; i++) { String n = System.nanoTime() + "" + r.nextInt(); System.out.println(n); } 第二种:采用UUID类 // 第二种:采用UUID类 for (int i = 0; i <…
如果另一个类中的那个方法是私有的话,就不能直接调用到,如果是其他类型的话看情况,如果是静态的(static)话,直接用类名可以调用到,如果是非静态的,就需要利用另一个类的实例(也就是用那个类生成的对象)来调用. 如 class A{public static void a(){}public void b(){} } public class B{public static void main(String[] args){A.a();//静态 new A().b();//非静态}}…
今天修改了一个功能,限制删除用户,在删除的时候不满足条件的时候提示用户原因,使用的sweet alert组件. abp框架前端集成了sweet alert 对http请求的error做了全局处理,我在后台程序直接抛出的UserFriendlyExcption,开始的时候发现能提示,然后再次操作发现没显示提示了, 卧槽,一脸懵逼啊,哪里的问题啊,赶忙把代码从头到尾检查一遍没问题啊,然后测试其他有这种错误提示的地方,发现没问题啊,都有提示的,就只有这里出现问题... 那就调试吧,在abp.ng.js…
一.思考题 以下代码可能有什么错误?为什么? import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("heihaozi", 1); Integer i = map != null ? map.get…
概述 Java是门极简风格的语言,比其它语言相比,它故意保持较少的特性,不仅在有些不常见的情况下会出些奇奇怪怪的错误,即使很一般的情况下也有可能让人栽根头.如果你习惯了别的语言,你读Java 的代码很容易搞错一些概念. 变量要么是引用 ,要么是基础类型 这是对的,变量不是对象.也就是说在下面这个例子里,s不是个对象,也不是字符串,它只是一个字符串的引用. String s = "Hello"; 这个能解释很多的问题,比如: 问题:如果说字符 串是不可变的,为什么我能修改它? s+=“!…