初识java多态性以及Integer和int类型用==比较
一,多态
多态就是同一个接口,使用不同的实例会有不同的操作。
多态实现:动态绑定。
引用变量所指向的具体类型和该引用变量发出的具体方法在编程时并不确定,在程序运行期间才确定。就是说引用变量到底指向哪个类的实例对象,以及调用什么方法在程序执行期间才能完全确定。
二,==
- Integer和int比较
Integer是int的封装类,当Integer与int进行==比较时,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以就是相等的。
- Integer对象比较
1
2
3Integer a = 128;//Integer a = Integr.valueOf(128); Integer b = new Integer(128);
Integer a=128被编译成–>Integera= Integer.valueOf(128)
Integer.valueOf源码:low -128;high 127
1
2
3
4
5
6public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
对于[-128,127]之间的数,第一次会缓存,之后从缓存取
new Integer源码
1
2
3
4public Integer(int value) { this.value = value; }
①两个new Integer()变量用==比较不一样,因为是不同对象
②对于[-128,127],使用Integer.valueOf()创建变量,用==比较是相等的。
这是因为Integer作为常量时,对于-128到127之间的数,会进行缓存,也就是说Integer a1 = 127时,在范围之内,这个时候就存放在缓存中,当再创建a2时,java发现缓存中存在127这个数了,就直接取出来赋值给a2,所以a1 == a2。
③Integer.valueOf()和new Integer创建的变量是无论如何不相等的,因为存放的内存位置不一样。
- ==到底在比较什么
==比较的是值,引用变量存储的是地址。
所以除了基本数据类型,引用类型是不能用==比较的。
参考文章:
https://blog.csdn.net/andyzhaojianhui/article/details/84324466
https://www.cnblogs.com/zouqf/p/9851050.html
最后
以上就是动听西装最近收集整理的关于初识java多态性以及Integer和int类型用==比较的全部内容,更多相关初识java多态性以及Integer和int类型用==比较内容请搜索靠谱客的其他文章。
发表评论 取消回复