面试当中遇到过这么一个问题,Integer类型,能通过 > 、 < 号进行比较吗?我印象中是会进行拆箱,然后转换成int进行比较,结果面试官说包装类型没有 > 、 < 方法,是不能直接比较的,现实际验证一下。不考虑null的情况。

代码很简单:

 public static void main(String[] args) {Integer i1 = new Integer(220);Integer i2 = new Integer(210);System.out.println(i1 >= i2);}

编译没有报错,运行结果也是正常的,打印的内容是 true

看一下javap后的主要代码:

public static void main(java.lang.String[]);descriptor: ([Ljava/lang/String;)Vflags: ACC_PUBLIC, ACC_STATICCode:stack=3, locals=3, args_size=10: new           #2                  // class java/lang/Integer3: dup4: sipush        2207: invokespecial #3                  // Method java/lang/Integer."<init>":(I)V10: astore_111: new           #2                  // class java/lang/Integer14: dup15: sipush        21018: invokespecial #3                  // Method java/lang/Integer."<init>":(I)V21: astore_222: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;25: aload_126: invokevirtual #5                  // Method java/lang/Integer.intValue:()I29: aload_230: invokevirtual #5                  // Method java/lang/Integer.intValue:()I33: if_icmplt     4036: iconst_137: goto          4140: iconst_041: invokevirtual #6                  // Method java/io/PrintStream.println:(Z)V44: return

可以看到,序号26、30 ,执行了Integer的intValue方法,将包装类型转换为基本数据类型,然后将值放入栈顶

33 if_icmplt 比较栈顶两int型数值大小,当结果小于0时跳转

所以,Integer的包装类型,也是可以通过> / < 进行比较的,但是底层还是通过int类型进行比较。

看一下Integer类提供的进行比较的方法 compareTo

 private final int value;public Integer(int value) {this.value = value;}public int compareTo(Integer anotherInteger) {return compare(this.value, anotherInteger.value);}public static int compare(int x, int y) {return (x < y) ? -1 : ((x == y) ? 0 : 1);}

其实也是通过转换成int类型进行比较。

看一下compareTo方法编译后的样子:

 public static void main(String[] args) {Integer i1 = new Integer(220);Integer i2 = new Integer(210);System.out.println(i1.compareTo(i2));}
public static void main(java.lang.String[]);descriptor: ([Ljava/lang/String;)Vflags: ACC_PUBLIC, ACC_STATICCode:stack=3, locals=3, args_size=10: new           #2                  // class java/lang/Integer3: dup4: sipush        2207: invokespecial #3                  // Method java/lang/Integer."<init>":(I)V10: astore_111: new           #2                  // class java/lang/Integer14: dup15: sipush        21018: invokespecial #3                  // Method java/lang/Integer."<init>":(I)V21: astore_222: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;25: aload_126: aload_227: invokevirtual #5                  // Method java/lang/Integer.compareTo:(Ljava/lang/Integer;)I30: invokevirtual #6                  // Method java/io/PrintStream.println:(I)V33: return

可以看到区别:
compareTo方法的返回值是int类型,小于返回-1,等于返回0,其他返回1。
直接比较大小,返回的是布尔类型,结果是true或者fasle。

关于Integer类型采用大于、小于号的验证相关推荐

  1. mybatis的Mapper文件中的大于小于号,为什么要转成“lt ;”、“gt ;”,转义后的lt、gt又代表什么?

    为什么的Mapper文件中的"<".">" 要转成"&lt ;"."&gt ;" 问题分析 ...

  2. mybatis中sql语句中大于小于号的两种解决方法

    1.使用<![CDATA[]]>,因为CDATA 部分中的所有内容都会被解析器忽略,所以建议使用<![CDATA[]]> 来解决小于号问题:实例:<![CDATA[ sq ...

  3. html特殊字符如大于小于号的写法

    html源码     显示结果     描述 <         >       大于号 >         <       小于号 &        &    ...

  4. 布局文件输入''''大于小于号等

    需要转义 < < 小于号 > > 大于号 & & 和 ' ' 单引号 " " 双引号

  5. MySql 时间比较:DATEDIFF函数与大于小于号

    SELECT COUNT(*) FROM tableA WHERE RECORDDATE>='2015-11-11' AND RECORDDATE<='2016-11-11'; SELEC ...

  6. MyBatis大于小于号问题

    MyBatis SQL模板是尖括号是标签,要是写大于号小于号的话他会认为这是一个标签 <![CDATA[文本内容]]> 其中文本内容中不能出现字符串"]]>",另 ...

  7. WPF xml配置文件里面的大于小于号转义

    转义字符:<![CDATA[]]>,将要转义的字符放到中括号中,比如要转小于号:<,则换为<![CDATA[<]]> <?xml version=" ...

  8. Yii2 mongodb 扩展的where的条件增加大于 小于号

    1. mongodb的where中有比較丰富的 条件.例如以下: static $builders = ['NOT' => 'buildNotCondition','AND' => 'bu ...

  9. MyBaits 大于小于号处理方法

    mybatis在实际的开发中,经常会遇到一些场景,比如查询小于某个时间,或者是查询小于某个年龄等.这个时候就需要在 MyBatis 的 XML 文件中使用一些 <.<= 等符号,但是如果直 ...

最新文章

  1. TIOBE 12 月编程语言:Python 有望第四次成为年度语言!
  2. POJ2709 染料贪心
  3. Python 技术篇-读取文件,将内容保存dict字典中。去掉字符串中的指定字符方法,dict字典的遍历
  4. java-01 JAVA三大版本比较JDK、JRE、JVM 的关系
  5. 前端学习(2901):javascript五大浏览器
  6. IDEA 这样配置注释模板,让你高出一个逼格!
  7. Oracle体系结构之控制文件管理
  8. Unity 单元测试(NUnit,UnityTestTools)
  9. hdu-2602POJ-3624---01背包裸题
  10. 基于51单片机的呼吸灯程序编写
  11. math.js api static function
  12. java.net.UnknownServiceException: CLEARTEXT communication to xxxxx not permitted by network secur...
  13. 第六届CCF计算机职业资格认证考试题解(C++)
  14. 【java】java intellij idea 破解
  15. python pywin32 的学习笔记
  16. 【Matlab】基于皮肤概率建模的人脸检测算法雏形
  17. fater-RCNN遇到的错误及其解决方案
  18. ax的范数最大_各类范数定义
  19. 人机对话比拼,Chat GPT和文心一言谁更接近真实交流?”
  20. eclipse如何修改工作空间名称

热门文章

  1. 魅蓝手机连接AndroidStudio日志不显示
  2. springboot+hibernate+jpa+SessionFactory项目搭建
  3. 自动化测试面试追命十问
  4. 分号是c语言的结束符不是分隔符,分号在C和Pascal中的区别
  5. Qt安装图解(Windows平台)
  6. 利用NOTIFYICONDATA实现MFC的托盘程序
  7. 为什么说扁平胜于嵌套
  8. jquery折叠卡片
  9. RK3568 buildroot文件系统下的三屏显示
  10. eclipse安装教程完整版