Java基础 抽象类和接口的区别、equals 与 == 的区别

一、抽象类和接口有什么区别

        抽象类与接口都用于抽象,但是抽象类可以有自己的部分实现,而接口规范某一行为,调用者实现这个接口

    主要区别:

      1、抽象类还是类只能单继承,而接口却可以多实现。

      2、抽象类满足所有类的属性,但是不可以被实例化。但它含main方法的话可以被调用。而接口不能实例化对象,没有构造方法,不能包含成员变量,除了static和final变量。

      3、接口的成员变量和方法必须是public修饰。

      4、抽象类中的方法可以有方法体,实现方法的具体功能,而接口不能。

        分析:

             实际上二者的使用动机不同进而使设计思想也不同。

             抽象类实际上就是对一类事物的抽象,运用抽象类即可以预先留可能行为,让继承的类去实现,亦可以直接实现引用。而接口则完全就是为了被调用而设计,当这一方法的实现改变的时候只需要改变实现类中重写的这个方法即可。而且接口并没有实例化创建构造方法,一个类可以实现多个接口,对实现接口的方法进行内容编辑。

二、equals与==的区别

           上面两个都是用来比较是否相等,==是值等,equals是内容相等。

       分析:     

          在这里也要讲一下Java的内存,以后会在博客里面详细将,这里主要针对equals和==来说一下:

          Java运行时的内存是分:方法区,虚拟机栈区,堆区,程序计数器,本地方法栈。

          通常我们new 的类存储的内容存放在堆存储区中。例如:

            String test= new String("abc");

             test则存储在栈区中,“abc”则存储在开辟的堆中。

            当使用equals时,例如:String test2 = new String("a"); 

              test2.equals(test);//表明在test2在栈中的索引所指向堆内存中内容是否等于test索引所指向的堆内存中的内容

            下面是String中的equals的源码,可以看出equals是拿出一个对象的内容去比较是否相等,相等返回true不等返回false。

                             

            而用== 比较的则是栈的内容。

                if(test==test2)//这样比较的的是test的地址和test2的地址是否相等。

                这个地址肯定是false,因为两个test开辟了两个堆空间地址肯定是不一样的

                若 String test 1= “a”;

                    String test3 ="a" ;

                此时 if(test1==test3) //此时“a”是存放在常量池中,(常量池是方法区的一部分)因为a相同,所以test3和test1指引的是同一地址,所以他们二者的值也相等结果为true。若test3 ="abc",的话在创建的过程中因为内容不同所以"abc"在常量池中与“a”的地址不同即结果为false。

                基本类型判断相等只能用==。例如:

                int a = 3; int b = 4;

        

    

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

任玉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值