java——常用的类和对象(包装类、==和equals的区别)

本次对包装类进行讲解,以Integer为例着重总结;然后对==和equals进行了区分;后面会继续更新新内容;以上内容可以直接粘贴到idea运行,便于理解;

包装类:

package java_changyongleiheduixiang;
//TODO 包装类:
public class java_22 {
    public static void main(String[] args) {
        //TODO 常见类和对象:
        //byte short int
        //float double
        //char
        //boolean
        //TODO 包装类:转换为对象的感觉
//        Byte b=null;
//        Short s=null;
//        Integer i=null;
//        Long l=null;
//        Float f=null;
//        Double d=null;
//        Character c=null;
//        Boolean bln=null;
        int i=10;
        //等同于将基本数据类型转化为包装类型:
        //自动装箱
        //Integer one=Integer.valueOf(i);
        Integer one=i;//等同于上方的语法,JVM自动装箱;
        //自动拆箱;
        //int i1=Integer.intValue(one);
        int i1=one;//与上方语法一样,


        //String 与int(Integer)的转换:
        //String->Integer:
        String s="1234";
        Integer inte=Integer.parseInt(s);
        int first=inte;
        System.out.println(inte);
        System.out.println(first);
        //int->String:
        Integer show=100;
        String sss=show.toString();
        String sss1=String.valueOf(show);
        System.out.println(sss);
        System.out.println(sss1);

    }
}

==和equals的区别:

package java_changyongleiheduixiang;
//TODO 比较:==和equals
public class java_26 {
    public static void main(String[] args) {
        //对于基本数据类型:==比较的是数值,
        int i=10;
        int j=10;
        System.out.println(i==j);//true
        double d=10.0;
        System.out.println(i==d);//true
        //引用数据类型:==比较的是变量指向的内存地址
        String a="aaa";//这个被放到字符串常量池中,和下方new出来的不是一个地址
        String b="aaa";
        String c=new String("aaa");
        //首先对于a和b这种赋值来说,在变量a赋值好后,创建b的时候没有新开辟空间,b也指向那个地址;
        // 但是对于c这样赋值来说,new了一个新的对象,也就是新开辟了一个空间,和a与b指向的地址不同;因此下方为false
        System.out.println(a==b);//true
        System.out.println(a==c);//false
        //一般来说比较字符串就是想比较里面的内容是否相同,==无法实现,所以说用equals方法;String类中的equals方法其实已经被重写好了
        System.out.println(a.equals(c));//true

        //对于String类中的equals方法已经被重写好了,但是如果新创建一个类的话,其实是object类中的equals方法,这个方法还是没有被重写的,和==没有区别;如下:
        User one=new User();
        User two=new User();
        System.out.println(one==two);
        System.out.println(one.equals(two));//可以查看源码,与String类中的equals方法不同,没有被重写,因此,如果想比较存储的东西是否相同的话而不是指向的地址是否相同就需要重写equals方法;

        //包装类型:注意,其实正确的写法是Integer i1=Integer.valueOf(100),可以查看这个valueOf方法的源码如下,
        // 其实有一个Integer缓存,-128到127,如果在这个范围内不会new一个新对象,如果超过这个范围,就会new一个新对象,
        // 这样就会新开辟一个地址空间,那么此时用==来比较的时候就不相等了

        /*public static Integer valueOf(int i) {
            if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
                return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
            return new Integer(i);
        }*/
        Integer i1=100;
        Integer i2=Integer.valueOf(100);//正确写法是这个,只不过JVM给省略了;
        Integer i3=128;
        Integer i4=128;
        System.out.println(i1==i2);//true
        System.out.println(i3==i4);//false
    }
}
class User{
    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小菜日记^_^

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

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

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

打赏作者

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

抵扣说明:

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

余额充值