集合,基本型包装型,Integer特性,重写.equals

整理(集合,基本类型,包装型)

1以下哪个不是Collection的子接口?

A. List

B Set

C SortedSet

D Map

正确答案:D
Java中集合分为三种
Set,List,Map
Set集合代表不可重复,List代表有序可重复的集合,Map带变得具有映射关系的集合
Java中的集合的接口主要由collection和map来实现
collection
set:EnumSet,SortedSet:TreeSet,HashSet:LickedHashSet
List:ArrayList,Vector:stack
Queue:Deque:LinkedList,PriorityQueue:ArrayQueue,
Map:
EnumMap,HashMap:LickedHashMap,HashTable:Properties,sortedMap:TreeMap,WeakHashMap
这个是一个简单的collection的图片

2数据类型不同之间的转换

Integer i = 42;
Long l = 42l;
Double d = 42.0;

下面为true的是

A (i == l)
B (i == d)
C (l == d)
D i.equals(d)
E d.equals(l)
F i.equals(l)
G l.equals(42L)
正确答案: G

1,基本型和基本型的包装型

可以自动拆箱封箱
int a=100;
Integer a1=100;
System.out.println(a==a1);//最后输出的结果是true

2,Integer特性

两个Integer进行比较,如果两个的值在-128~127之间的时候,结果为true
简单来说原因就是因为在最开始的时候Integer a=100;
变量a为Integer类型,而1为int类型,且Integer和int之间并无继承关系,
按照Java的一般处理方法,这行代码应该报错。
但是因为有自动装箱,自动拆箱装箱是指什么呢?
将基本数据类型数据转换为对应的包装器类对象叫做装箱。
将包装器类对象转换为对应的基本数据类型数据叫做拆箱。
所有基本数据类型包装类,都提供通过向包装类构造器中传入一个字符串参数的方式来创建包装类对象。
但是如果传入的字符串参数不符合基本数据类型格式,那么将引发java.lang.NumberFormatException异常。数据转换格式化异常。
在为Integer类型的变量赋int类型值时,Java会自动将int类型转换为Integer类型,
Integer a=Integer.valueof();
Integer a = 1;即,Integer a = Integer.valueOf(1);
valueOf()方法返回一个Integer类型值,并将其赋值给变量a。这就是int的自动装箱。
具体的描述我就不说了,为什么Integer在-128~127之间会相等呢?
按照正常道理来说两个对象用
来判断会判断他们的地址是否相同,
但是在:Integer.class在装载(Java虚拟机启动)时,其内部类型IntegerCache的static块即开始执行,
实例化并暂存数值在-128到127之间的Integer类型对象。
当自动装箱int型值在-128到127之间时,即直接返回IntegerCache中暂存的Integer类型对象。

基本类型装箱类型取值范围是否缓存缓存范围
byteByte-128 ~ 127-128 ~ 127
shortShort-2^15 ~ (2^15 - 1)-128 ~ 127
intInteger-2^31 ~ (2^31 - 1)-128 ~ 127
longLong-2^63 ~ (2^63 - 1)-128 ~ 127
floatFloat
doubleDouble
booleanBooleantrue, falsetrue, false
charCharacter\u0000 ~ \uffff\u0000 ~ \u007f

3,equals

.equals方法会先比较类型,在比较值,如果都相同才会返回true
我们来分析一下.equals方法,下面是String重写.equals方法
为了String本身的方便调用,他自己重写了方法

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    
    }
    

如果是String本身重写的方法,会先进行判断,先看他是否内存相等,如果不相等
看他是不是String的实例
instanceof,就是看看这个实例是不是属于这个类
很多类也会自己重写.equals方法为了便于使用,例如说Integer,还有我们自己写的类,比如说你需要完成一个学生管理系统
可以重写.equals方法进行判断学生是否是重复的

4.基本型加在一起可以等同于封装型的值

基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,
基本型转换为其封装类型,再进行的比较。
int a=1;
int b=2;
Integer c=3;
System.out.println(c.equals(b+a));//最后的答案是true

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又是重名了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值