提高你的Java代码质量吧:谨慎包装类型的比较
一、分析
基本类型可以比较大小,其所对应的包装类型都实现了Comparable接口此问题。
二、场景
代码如下:
public class Client{
public static void main(String[] args){
Integer i = new Integer(100);
Integer j = new Integer(100);
compare(i,j);
}
}
public static void compare(Integer I, Integer j){
System.out.println(i == j);
System.out.println(i > j);
System.out.println(i < j);
}
既然基本类型和包装类型是可以自由转换的,那上面的代码的输出结果是不是可以打印两个值相等呢?运行结果如下:
false
false
false
竟然是3个false,我们来一一解释:
I == j:在Java中“==”是用来判断两个操作数是否相等关系的,如果基本类型是判断值是否相等,如果是对象则判断地址是否相等。这里很明显是两个对象,两个地址不相等。
i > j 和i < j:">"和"<"用来判断两个数字类型的大小关系,注意只能是数字类型的判断,对于Integer包装类型,是根据intValue()方法的返回值(也就是相应的基本类型)进行比较的。显然两者是相等的,没有大小关系。
三、建议
问题分析清楚了,只要是两个对象之间的比较,就应该采用相应的方法,而不是通过Java的默认机制">","<"等机制来处理。除非你确定对此非常了解。
提高你的Java代码质量吧:谨慎包装类型的比较的更多相关文章
- 提高你的Java代码质量吧:不要让类型默默转换
一.分析 在Java运算中的类型转换,是先运算在进行类型转换的.具体场景如下. 二.场景 在如下程序中: public class Client{ public static final int ...
- 提高你的Java代码质量吧:少用静态导入
一.分析 从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序. 但是,滥用静态导入会使程序更难阅读,更难维护.静态导 ...
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
一.分析 字符串的操作,诸如追加.合并.替换.倒序.分隔等,都是在编码过程中经常用到的,而且Java也提供了append.replace.reverse.split等方法来完成这些操作,它们使用起来 ...
- 提高你的Java代码质量吧:如果有必要,使用变长数组吧
一.分析 Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便. 二.场景 比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生 ...
- 提高你的Java代码质量吧:小心switch带来的空值异常
一.分析 使用枚举定义常量时,会有伴有大量的switch语句判断,目的是为每个枚举解释其行为. 我们知道,目前的Java的switch语句只能判断byte.short.char.int类型(JDK7 ...
- 提高你的Java代码质量吧:使用valueof前必须进行校验
一.分析 每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode.name.valueOf等,其中valueOf方法会把一个String类型的名称转变成枚 ...
- 提高你的Java代码质量吧:让我们疑惑的字符串拼接方式的选择
一.分析 对于一个字符串进行拼接有三种方法:加号.concat方法.及StringBuiler或StringBuffer. 1."+"方法拼接字符串 str += " ...
- 提高你的Java代码质量吧:使用构造函数协助描述枚举项
一.分析 一般来说,我们经常使用的枚举项只有一个属性,即排序号,其默认值是从0.1.2... ....但是除了排序号外,枚举还有一个(或多个)属性. 二.场景 比如,可以通过枚举构造函数声明业务值,定 ...
- 提高你的Java代码质量吧:正确使用String、StringBuffer、StringBuilder
一.建议 CharSequence接口有三个实现类与字符串相关:String.StringBuffer.StringBuilder,虽然它们都与字符串相关,但是其处理机制不同. 根据不同的场景,建议 ...
随机推荐
- 字符串对象的charAt函数存在的意义
var style = ""; style[0] //undefined var style = ""; style.charAt(0); //"&q ...
- sh-copy-id命令报错:-bash: ssh-copy-id: command not found
参考网址:http://www.bubuko.com/infodetail-1662159.html yum -y install openssh-clients
- C++ Primer读书笔记(2)
getline(cin,string s)可以读取一整行,包括空白符.使用ctrl+Z结束 字符串字面值与string是不同的类型.两个字符串字面值不能直接相加. 处理string对象中的字符时,C+ ...
- springboot 解决 woff2、ttf 跨域无法解析问题
@Configuration public class CORSConfiguration extends WebMvcConfigurerAdapter { @Override public voi ...
- Mysql中count(*)和limit同时使用的问题
1.带有count的sql语句只会返回一条记录 , 结果如下图: 2.带有limit的sql语句是最后执行的 , 以上sql语句将返回空行,因为count(*)只会使sql语句产生一条结果记录,所以后 ...
- ubuntu14.0安装ITK的步骤
(1) sudo apt-get install cmake (2) sudo apt-get install cmake-curses-gui (3)下载安装包InsightToolkit-4.11 ...
- 神仙数据结构——FHQ_Treap
$FHQ\_Treap$是平衡树的一种,它不仅支持几乎所有的平衡树的操作,而且实现特别简单,总共只有两个操作.这里来简单介绍一下. 基本操作 $FHQ\_Treap$和$Treap$一样是需要用随机值 ...
- Android通知栏沉浸式/透明化完整解决方案
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6640649.html 参考文献:https://github.com/ljgsonx/adaptiveSt ...
- css实现自适应正方形
这里介绍7种方法,仅供参考. 1.vm单位 <div class="square-shape">这是一个可以自适应的正方形,此法适用于移动端web页面.</div ...
- HDU 3802Ipad,IPhone
前两块可以看成是不是二次剩余,快速幂计算即可. 后半部分可以看成x1=a+b+2ab,x2=a+b-2ab为特征方程x^2-px-qx=0的两根 然后可以通过韦达定理求出p和q,因此递推式为A(n+2 ...