关于Integer类型采用大于、小于号的验证
面试当中遇到过这么一个问题,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类型采用大于、小于号的验证相关推荐
- mybatis的Mapper文件中的大于小于号,为什么要转成“lt ;”、“gt ;”,转义后的lt、gt又代表什么?
为什么的Mapper文件中的"<".">" 要转成"< ;"."> ;" 问题分析 ...
- mybatis中sql语句中大于小于号的两种解决方法
1.使用<![CDATA[]]>,因为CDATA 部分中的所有内容都会被解析器忽略,所以建议使用<![CDATA[]]> 来解决小于号问题:实例:<![CDATA[ sq ...
- html特殊字符如大于小于号的写法
html源码 显示结果 描述 < > 大于号 > < 小于号 & & ...
- 布局文件输入''''大于小于号等
需要转义 < < 小于号 > > 大于号 & & 和 ' ' 单引号 " " 双引号
- MySql 时间比较:DATEDIFF函数与大于小于号
SELECT COUNT(*) FROM tableA WHERE RECORDDATE>='2015-11-11' AND RECORDDATE<='2016-11-11'; SELEC ...
- MyBatis大于小于号问题
MyBatis SQL模板是尖括号是标签,要是写大于号小于号的话他会认为这是一个标签 <![CDATA[文本内容]]> 其中文本内容中不能出现字符串"]]>",另 ...
- WPF xml配置文件里面的大于小于号转义
转义字符:<![CDATA[]]>,将要转义的字符放到中括号中,比如要转小于号:<,则换为<![CDATA[<]]> <?xml version=" ...
- Yii2 mongodb 扩展的where的条件增加大于 小于号
1. mongodb的where中有比較丰富的 条件.例如以下: static $builders = ['NOT' => 'buildNotCondition','AND' => 'bu ...
- MyBaits 大于小于号处理方法
mybatis在实际的开发中,经常会遇到一些场景,比如查询小于某个时间,或者是查询小于某个年龄等.这个时候就需要在 MyBatis 的 XML 文件中使用一些 <.<= 等符号,但是如果直 ...
最新文章
- TIOBE 12 月编程语言:Python 有望第四次成为年度语言!
- POJ2709 染料贪心
- Python 技术篇-读取文件,将内容保存dict字典中。去掉字符串中的指定字符方法,dict字典的遍历
- java-01 JAVA三大版本比较JDK、JRE、JVM 的关系
- 前端学习(2901):javascript五大浏览器
- IDEA 这样配置注释模板,让你高出一个逼格!
- Oracle体系结构之控制文件管理
- Unity 单元测试(NUnit,UnityTestTools)
- hdu-2602POJ-3624---01背包裸题
- 基于51单片机的呼吸灯程序编写
- math.js api static function
- java.net.UnknownServiceException: CLEARTEXT communication to xxxxx not permitted by network secur...
- 第六届CCF计算机职业资格认证考试题解(C++)
- 【java】java intellij idea 破解
- python pywin32 的学习笔记
- 【Matlab】基于皮肤概率建模的人脸检测算法雏形
- fater-RCNN遇到的错误及其解决方案
- ax的范数最大_各类范数定义
- 人机对话比拼,Chat GPT和文心一言谁更接近真实交流?”
- eclipse如何修改工作空间名称