• java Object类 && 包装类


    目录

    Object 类的使用

     ==操作符与equals方法

    = =:

    equals()

    重写equals()方法的原则

    面试题 

    toString() 方法

    包装类(Wrapper)的使用

    基本类型、包装类与String类间的转换

    包装类用法举例 

    总结


    Object 类的使用

    Object类是所有Java类的根父类

    如果在类的声明中未使用extends关键字指明其父类,则默认父类 为java.lang.Object

    1. public class Person {...}
    2. 等价于:
    3. public class Person extends Object {...}
    4. method(Object obj){…} //可以接收任何类作为其参数
    5. Person o=new Person();
    6. method(o);

     ==操作符与equals方法

    = =

    基本类型比较值:只要两个变量的值相等,即为true。  int a=5; if(a==6){…}

    引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true

    Person p1=new Person();

    Person p2=new Person();

    if (p1==p2){…}

    “==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本 数据类型除外)

    equals()

     equals():所有类都继承了Object,也就获得了equals()方法。还可以重写。

    • 只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。
    • 格式:obj1.equals(obj2)

     特例:当用equals()方法进行比较时,对类FileString、Date及包装类 (Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;

    原因:在这些类中重写了Object类的equals()方法。

     当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等 

    重写equals()方法的原则

    1. 对称性:如果x.equals(y)返回是“true” ,那么y.equals(x)也应该返回是 “true”。
    2.  自反性:x.equals(x)必须返回是“true”。
    3. 传递性:如果x.equals(y)返回是“true” ,而且y.equals(z)返回是“true” , 那么z.equals(x)也应该返回是“true”。
    4. 一致性:如果x.equals(y)返回是“true” ,只要xy内容一直不变,不管你 重复x.equals(y)多少次,返回都是“true”。
    5. 任何情况下,x.equals(null),永远返回是“false” ;
    6. x.equals(x不同类型的对象)永远返回是“false”。

    面试题 

    1. == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型 就是比较内存地址
    2. equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。
    3.  具体要看自定义类里有没有重写Object的equals方法来判断。
    4. 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。   

    toString() 方法

         toString() 方法在 Object 类中定义,其返回值是 String 类型,返回类名和它 的引用地址。

     在进行String与其它类型数据的连接操作时,自动调用toString()方法

    Date now=new Date();

    System.out.println(“now=”+now); 相当于System.out.println(“now=”+now.toString());

    可以根据需要在用户自定义类型中重写toString()方法 如String 类重写了toString()方法,返回字符串的值。

    s1=“hello”;

    System.out.println(s1);//相当于System.out.println(s1.toString());

    基本类型数据转换为String类型时,调用了对应包装类的toString()方法

    int a=10; System.out.println(“a=”+a); 

    包装类(Wrapper)的使用

    基本数据类型包装成包装类的实例---装箱

    通过包装类的构造器实现:

    int i = 500; Integer t = new Integer(i);

    还可以通过字符串参数构造包装类对象:

    Float f = new Float(“4.56”);

    Long l = new Long(“asdf”); //NumberFormatException

    获得包装类对象中包装的基本类型变量 ---拆箱

    调用包装类的.xxxValue()方法:

    boolean b = bObj.booleanValue();

    JDK1.5之后,支持自动装箱,自动拆箱。但类型必须匹配

    基本类型、包装类与String类间的转换

    字符串转换成基本数据类型

    • 通过包装类的构造器实现:  int i = new Integer(“12”);
    • 通过包装类的parseXxx(String s)静态方法:  Float f = Float.parseFloat(“12.1”);

    基本数据类型转换成字符串

    • 调用字符串重载的valueOf()方法: String fstr = String.valueOf(2.34f);
    • 更直接的方式: String intStr = 5

     

    包装类用法举例 

    1. int i = 500;
    2. Integer t = new Integer(i);
    3. 装箱:包装类使得一个基本数据类型的数据变成了类。
    4. 有了类的特点,可以调用类中的方法。
    5. String s = t.toString(); // s =500“,t是类,有toString方法
    6. String s1 = Integer.toString(314); // s1=314“ 将数字转换成字符串。
    7. String s2=4.56”;
    8. double ds=Double.parseDouble(s2); //将字符串转换成数字
    9.  拆箱:将数字包装类中内容变为基本数据类型。
    10. int j = t.intValue(); // j = 500,intValue取出包装类中的数据
    11.  包装类在实际开发中用的最多的在于字符串变为基本数据类型。
    12. String str1 = "30" ;
    13. String str2 = "30.3" ;
    14. int x = Integer.parseInt(str1) ; // 将字符串变为int型
    15. float f = Float.parseFloat(str2) ; // 将字符串变为int型

    总结

    1. package com.jyc.p2;
    2. /*
    3. 一.class java.lang.Object
    4. ①equals()
    5. 1.Object类是所有Java类的根父类
    6. 如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object
    7. objec 类中的属性和方法都具备通用性(object类中声明了一个空参构造器)
    8. 属性 无
    9. 方法:equals(),toString(),getClass(),hashCode(),clone(),finalize(),wait() notify(),notifyAll()
    10. 2.==&&equals的区别
    11. ==运算符
    12. 可以使用在基本数据类型变量和引用数据类型变量中
    13. 如果比较的是基本数据类型变量,比较保存的两个数据是否相等(不一定类型要相同)
    14. 如果比较的是引用数据类型变量,比较两个对象的地址值是否相同
    15. 3.equals()方法的使用
    16. equals是一个方法,而非运算符
    17. 只能适用于引用数据类型
    18. object.equals的定义
    19. public boolean equals(Object obj) {
    20. return (this == obj);
    21. }
    22. 4.说明object.equals()和==的作用是相同的,比较两个对象的地址值是否相同,即两个对象的引用是否相同
    23. String Date File 包装类等都重写了object类中的equals方法,重写以后比较的不是两个引用地址是否相同,
    24. 而是比较两个对象的实体内容是否相同
    25. 5..通常情况下我们自定义得类如果使用equals()方法,也通常是比较两个对象的实体内容是否相同,那么
    26. 我们就需要对object类中的equals()进行重写 (重写的原则比较两个对象的实体内容是否相同)
    27. ② toString()
    28. 1.当我门输出对象的一个引用时,实际上是调用当前对象的toString方法
    29. 2.object.toString()的定义
    30. 获取类的类名+通过hashCode获取空间地址值转为16进制(虚拟地址)
    31. public String toString() {
    32. return getClass().getName() + "@" + Integer.toHexString(hashCode());
    33. }
    34. 3.像 String Date File 包装类等都重写了object类中的 toSring 方法,是的调用对象的toString方法时返回实体内容信息
    35. 4.自定义类也可以重写toString方法 当调用此方法时返回对象的实体内容
    36. 二 包装类的使用
    37. 1.java提供了八种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
    38. 基本数据类型 包装类 String三者直接的相互转换
    39. 基本数据类型转为包装类:调用包装类的构造器(自动装箱)
    40. 包装类转为基本数据类型调用包装类xxx的xxxvale;(自动拆箱)
    41. 基本数据类型,包装类转为string 连接运算, 调用String.valueof()
    42. string转为基本数据类型,包装类 调用包装类的parsexxx()
    43. * */
    44. public class Test99 {
    45. public static void main(String[] args) {
    46. Order order1=new Order("zs",18);
    47. Order order2=new Order("zs",18);
    48. System.out.println(order1.getClass().getSuperclass());
    49. System.out.println("---------==比较基本数据类型-------------");
    50. int i=10;
    51. char j=10;
    52. System.out.println(j==i);
    53. System.out.println("---------==比较引用数据类型--------------");
    54. String str1=new String("str");
    55. String str2=new String("str");
    56. System.out.println(str1==str2);
    57. System.out.println("---------equals的使用------------");
    58. System.out.println(str1.equals(str2));//true
    59. System.out.println(order1.equals(order2));//false--->true
    60. System.out.println("--------toString的使用----------");
    61. System.out.println(order1.toString());//com.jyc.p2.Order@1540e19d--》Order[name=zs,age=18]
    62. System.out.println("-----------基本数据类型转为包装类---------------");
    63. int num=10;
    64. Integer num1=new Integer(num);
    65. System.out.println(num1.toString());
    66. System.out.println(num1.toString());
    67. Boolean b1=new Boolean(true);//true
    68. Boolean b2=new Boolean("trUe");//true
    69. Boolean b3=new Boolean("true123"); //false
    70. System.out.println(b1);
    71. System.out.println(order1.isFlage); //null
    72. System.out.println("-----------包装类转为基本数据类型---------------");
    73. Integer in1=new Integer(12);
    74. int i1= in1.intValue();
    75. System.out.println(i1+1);//13
    76. System.out.println("-----------装箱&&拆箱---------------");
    77. //装箱
    78. int num3=10;
    79. Integer in3=num;
    80. System.out.println(in3);
    81. //拆箱
    82. int num4=in3;
    83. System.out.println(num4);
    84. System.out.println("---------- 基本数据类型,包装类转为string---------------");
    85. //连接运算
    86. int num6=66;
    87. String s1=num6+" ";
    88. Double d1=new Double(12.3);
    89. String str3=String.valueOf(d1);
    90. System.out.println(s1);
    91. System.out.println(str3);
    92. System.out.println("---------- string转为基本数据类型,包装类---------------");
    93. String s5="123";
    94. int num5=Integer.parseInt(s5);
    95. System.out.println(num5+1);
    96. }
    97. }
    98. class Order{
    99. int age;
    100. String name;
    101. Boolean isFlage;
    102. Order(){ }
    103. Order( String name,int age){
    104. this.name=name;
    105. this.age=age;
    106. }
    107. //重写 equals 方法 比较两个对象的实体内容
    108. public boolean equals(Object obj) {
    109. //判断两个对象是否是同一个对象
    110. if (this==obj){
    111. return true;
    112. }
    113. //判断两个对象是不是同一个类
    114. if (obj instanceof Order){
    115. //强制类型转换为Order相同类
    116. Order o=(Order)obj;
    117. return this.age==o.age &&this.name.equals(o.name);
    118. }else{
    119. return false;
    120. }
    121. }
    122. //重写toString方法
    123. public String toString() {
    124. return "Order[name="+name+",age="+age+"]";
    125. }
    126. }

  • 相关阅读:
    《Effective C++》学习笔记——区分接口继承和实现继承
    2022网络搭建国赛题中的一道路由与交接题目解析
    prometheus
    HTML期末大作业(HTML+CSS+JavaScript响应式游戏资讯网站bootstrap网页)
    XSC63-300-S-CB、XSC80-400-S-CA、XSC100-700-S-LB方型气缸
    全网唯一 | 互联网公司微信支付宝服务商入驻流程图文指南
    【数据结构】测试4 串
    手把手教你部署Jenkins教程,小白也能学会(多图预警)!
    Jetson简介、编程开发与环境搭建
    【C++入门指南】类和对象(上)
  • 原文地址:https://blog.csdn.net/qq_63358859/article/details/128204693