关于==和equals、toString以及包装类的探讨

==和equals的区别

== :运算符

  1. 可以使用在基本数据类型变量和引用数据类型变量中
  2. 基本数据类型之间比较:比较两个变量保存的数据是否相等
  3. 引用数据类型之间比较:比较两个对象的地址值是否相同

equals()方法

  1. Object类中定义的equals方法与==的作用相同:比较两个句柄(引用)是否指向同一地址值(即是否指向同一个对象)
  2. 像String、Date、File、包装类等都对equals()方法进行了重写,重写后比较的是两个句柄(引用)指向的对象的”实体内容“是否相同
  3. 通常情况下,自定义类如果使用equals()方法,也是要比较两个对象的“实体内容”是否相同。即对equals()方法进行重写

toString()的使用

  1. 当我们输出一个对象时(System.out.println())实际上就是调用当前对象的toString()方法。详细可见println()方法的源码
  2. 像String、Date、File、包装类等都对toString()方法进行了重写,使得在调用对象的toString()时,返回“实体内容”的信息
  3. 自定义类也可以重写toString()方法,当调用此方法时,返回对象的“实体内容”

包装类的使用

针对八种基本数据类型都有与之对应的引用数据类型(包装类),使基本数据类型具有类的特征

  1. 包装类----->基本数据类型:调用包装类Xxx的xxxValue()方法

  2. 基本数据类型------->包装类:调用包装类的构造器(即通过创建与基本数据类型相对应的包装类即可)

    在jdk5.0新特性:自动装箱与自动拆箱

    //自动装箱
    int num1 = 10;
    Integer in1 = num1;
    //自动拆箱
    int num2 = in1;
    
  3. 基本数据类型、包装类------>String类型:调用String类的valueOf()方法

    int num1 = 10;
    //方式一:连接运算
    String str1 = num1 + "";
    //方式二:调用String的静态方法valueOf()
    String str2 = String.valueOf(num1);
    
  4. String类型------->基本数据类型、包装类:调用包装类中的parseXxx(String s)方法

    String str1 = "123";
    //可能会报NumberFormatException
    int num1 = Integer.parseInt(str1);
    

面试题

Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
//Integer内部定义了IntegerCache内部类,该内部类中定义了Integer[]
//保存了从-128~127范围的整数。如果使用自动装箱的方式,给Integer赋值的范围在-128~127范围内时,可以直接使用数组中的元素,不用再去new了。
//目的是提高装箱的效率
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true

Integer x = 128;//超出-128~127范围,所以新创建了一个对象
Integer y = 128;
System.out.println(m == n);//false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值