java基础之一 对象,接口

一、==和equals的区别

==:

  • 基本类型,值相等即返回true
  • 引用类型:比较栈(stack)内存地址是否相等,相等即可返回true(string和integer除外,由于两个对象在jvm中存储不同)

equals:

  • 不能比较基本类型,只能比较两个对象,堆(heap)内存中的值是否相等,如果相等返回true
  • 一般需要自定义,重写该方法,主要有业务决定
int t1=1;
int t2=2;
Person p1=new Person();
Person p2=new Person();
t1==t2 //true
p1==p2 //false
p1.equals(p2) //true

此处重点说明string和integer对象

String内存位置说明

  • 显式的String常量
    详解string内存空间
    String a1 = “holten”;
    String b1 = “holten”;
    第一句代码执行后就在常量池(java7前在方法区中,java7后移至对堆里)中创建了一个值为holten的String对象;
    第二句执行时,因为常量池中存在holten所以就不再创建新的String对象了。
    此时该字符串的引用在虚拟机栈里面。
    另外:
    String s1=”a”;
    String s2=s1+”b”;
    System.out.println(s2==”ab”);//输出false
    这里s2地址和”ab”地址不一致,所以输出false

String对象
String a2 = new String(“holtenObj”);
String b2 = new String(“holtenObj”);
Class被加载时就在常量池中创建了一个值为holtenObj的String对象,第一句执行时会在堆里创建new String(“holtenObj”)对象;
第二句执行时,因为常量池中存在holtenObj所以就不再创建新的String对象了,直接在堆里创建new String(“holtenObj”)对象。

此时:
a1==b1  //true  常量池值不变
a2==b2 //false 比较栈内存地址
a1.equals(b1) //true 比较string对象值
a2.equals(b2) //true 比较new string()对象在堆内存中的值

integer:
在interger类中,为了初始化方便,提供-128-127之间的数创建对象时直接创建在常量池中,其他对象会建立堆内存中

integer t1=new integer(1);
integer t2=new integer(1);
integer t3=new integer(128);
integer t4=new integer(128);
Integer c = 3;    
Integer d = 3;
c==d //true jvm底层在常量池建立一个integer对象
c.equals(d) //true 值相等
t1==t2 //true
t1.equals(t2) //true

t3==t4  //false 地址不一致
t3.equals(t4) //true 堆内存中对象值相等

int i=2017Integer j=2017;
i==j  //true  
i.equals(j) //true  实际对象值相等

接口和抽象类的区别

共同点:
都不能创建实例化对象,且可包含抽象方法
不同点:
第一:从接口和类的角度

  1. 中可以有静态方法普通方法的实现,静态变量普通变量构造器普通代码块,而接口都没有
  2. 接口可以支持实现多个接口,类不能多继承。

第二:从设计思想的角度

  1. 接口体现一种规范,系统的总览,规定了实现者向外提供的服务,规定了调用者可以调用的方法和如何访问该方法
  2. 抽象类体现一种模板式设计,即多个子类调用同一个父类,可以作为系统实现过程中的中间产品,这个产品已经实现了部分功能,但是又有部分功能没有实现,即这个产品不是最终产品。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值