java Object类 包装类

news2024/9/22 7:39:01

目录

Object 类的使用

 ==操作符与equals方法

= =:

equals()

重写equals()方法的原则

面试题 

toString() 方法

包装类(Wrapper)的使用

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

包装类用法举例 

总结


Object 类的使用

Object类是所有Java类的根父类

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

public class Person {...}
等价于:
public class Person extends Object {...}

method(Object obj){…} //可以接收任何类作为其参数
Person o=new Person();
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

 

包装类用法举例 

int i = 500;
Integer t = new Integer(i);
装箱:包装类使得一个基本数据类型的数据变成了类。
有了类的特点,可以调用类中的方法。
String s = t.toString(); // s = “500“,t是类,有toString方法
String s1 = Integer.toString(314); // s1= “314“ 将数字转换成字符串。
String s2=“4.56”;
double ds=Double.parseDouble(s2); //将字符串转换成数字

 拆箱:将数字包装类中内容变为基本数据类型。
int j = t.intValue(); // j = 500,intValue取出包装类中的数据
 包装类在实际开发中用的最多的在于字符串变为基本数据类型。
String str1 = "30" ;
String str2 = "30.3" ;
int x = Integer.parseInt(str1) ; // 将字符串变为int型
float f = Float.parseFloat(str2) ; // 将字符串变为int型

总结

package com.jyc.p2;
/*
一.class java.lang.Object 类
   ①equals()
     1.Object类是所有Java类的根父类
        如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
        objec 类中的属性和方法都具备通用性(object类中声明了一个空参构造器)
               属性 无
                方法:equals(),toString(),getClass(),hashCode(),clone(),finalize(),wait() notify(),notifyAll()
     2.==&&equals的区别
        ==运算符
        可以使用在基本数据类型变量和引用数据类型变量中
        如果比较的是基本数据类型变量,比较保存的两个数据是否相等(不一定类型要相同)
        如果比较的是引用数据类型变量,比较两个对象的地址值是否相同
     3.equals()方法的使用
       equals是一个方法,而非运算符
       只能适用于引用数据类型
       object.equals的定义
       public boolean equals(Object obj) {
             return (this == obj);
       }
     4.说明object.equals()和==的作用是相同的,比较两个对象的地址值是否相同,即两个对象的引用是否相同
      像  String Date File 包装类等都重写了object类中的equals方法,重写以后比较的不是两个引用地址是否相同,
     而是比较两个对象的实体内容是否相同

     5..通常情况下我们自定义得类如果使用equals()方法,也通常是比较两个对象的实体内容是否相同,那么
     我们就需要对object类中的equals()进行重写 (重写的原则比较两个对象的实体内容是否相同)

  ② toString()
       1.当我门输出对象的一个引用时,实际上是调用当前对象的toString方法
       2.object.toString()的定义
          获取类的类名+通过hashCode获取空间地址值转为16进制(虚拟地址)
           public String toString() {
             return getClass().getName() + "@" + Integer.toHexString(hashCode());
           }
       3.像  String Date File 包装类等都重写了object类中的 toSring 方法,是的调用对象的toString方法时返回实体内容信息
       4.自定义类也可以重写toString方法 当调用此方法时返回对象的实体内容

二 包装类的使用
1.java提供了八种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
    基本数据类型 包装类 String三者直接的相互转换
    基本数据类型转为包装类:调用包装类的构造器(自动装箱)
    包装类转为基本数据类型调用包装类xxx的xxxvale;(自动拆箱)
    基本数据类型,包装类转为string    连接运算, 调用String.valueof()
    string转为基本数据类型,包装类 调用包装类的parsexxx()




* */
public class Test99 {
    public static void main(String[] args) {
            Order order1=new Order("zs",18);
            Order order2=new Order("zs",18);


            System.out.println(order1.getClass().getSuperclass());
            System.out.println("---------==比较基本数据类型-------------");
            int i=10;
            char j=10;
            System.out.println(j==i);

            System.out.println("---------==比较引用数据类型--------------");
            String str1=new String("str");
            String str2=new String("str");
            System.out.println(str1==str2);

            System.out.println("---------equals的使用------------");
            System.out.println(str1.equals(str2));//true
            System.out.println(order1.equals(order2));//false--->true

            System.out.println("--------toString的使用----------");
            System.out.println(order1.toString());//com.jyc.p2.Order@1540e19d--》Order[name=zs,age=18]

             System.out.println("-----------基本数据类型转为包装类---------------");
             int num=10;
             Integer num1=new Integer(num);
             System.out.println(num1.toString());
             System.out.println(num1.toString());
             Boolean b1=new Boolean(true);//true
             Boolean b2=new Boolean("trUe");//true
             Boolean b3=new Boolean("true123"); //false
             System.out.println(b1);
             System.out.println(order1.isFlage); //null
             System.out.println("-----------包装类转为基本数据类型---------------");
             Integer in1=new Integer(12);
             int i1= in1.intValue();
             System.out.println(i1+1);//13
             System.out.println("-----------装箱&&拆箱---------------");
             //装箱
             int num3=10;
             Integer in3=num;
             System.out.println(in3);
             //拆箱
             int num4=in3;
            System.out.println(num4);
            System.out.println("----------  基本数据类型,包装类转为string---------------");
            //连接运算
            int num6=66;
            String s1=num6+" ";
            Double d1=new Double(12.3);
            String str3=String.valueOf(d1);
            System.out.println(s1);
            System.out.println(str3);
            System.out.println("----------  string转为基本数据类型,包装类---------------");
            String s5="123";
            int num5=Integer.parseInt(s5);
             System.out.println(num5+1);






        }
    }
class  Order{
    int age;
    String name;
    Boolean isFlage;
    Order(){ }
    Order( String name,int age){
        this.name=name;
        this.age=age;
    }

    //重写 equals 方法 比较两个对象的实体内容
    public boolean equals(Object obj) {
        //判断两个对象是否是同一个对象
        if (this==obj){
            return true;
        }
        //判断两个对象是不是同一个类
        if (obj instanceof Order){
            //强制类型转换为Order相同类
            Order o=(Order)obj;
            return  this.age==o.age &&this.name.equals(o.name);
        }else{
            return  false;
        }
    }

    //重写toString方法
    public String toString() {
        return "Order[name="+name+",age="+age+"]";
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新出炉的U-Net研究性综述:Medical Image Segmentation Review: The Success of U-Net

热乎的Medical Segmentation 综述1 文章介绍2 前言3 U-Net变型4 Skip Connection Enhancements4.1 Increasing the Number of Skip Connections4.2 Processing Feature Maps within the Skip Connections4.3 Combination of Encoder and Decoder Feature Maps5 Backbone Design…

每天一个面试题:四种引用,弱引用防止内存泄漏(12.7.2022)

每天一个面试题:四种引用四种引用基本介绍实例Demo- 虚引用弱引用防止内存泄漏弱引用Debug分析源码开始全新的学习,沉淀才会有产出,一步一脚印! 面试题系列搞起来,这个专栏并非单纯的八股文,我会在技术底层…

配对交易之统计套利配对:协整(cointegration)

Engle和Granger观察到了一个相当有趣的现象。尽管两个时间序列是非平稳的,但在某些情况下,两者的特定线性组合实际上是平稳的;也就是说,这两个序列在某种程度上是步调一致的。Engle和Granger创造了“协整”(cointegrat…

【Tensorflow+自然语言处理+LSTM】搭建智能聊天客服机器人实战(附源码、数据集和演示 超详细)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、自然语言处理与智能 自然语言处理技术是智能客服应用的基础,在自然语言处理过程中,首先需要进行分词处理,这个过程通常基于统计学理论,分词的精细化可以提升智能客服的语…

小白课程,前端入门新手,必须了解的回调函数概念和应用实例

******内容预警******新手内容,大佬请绕道 做为一个纯纯的小白,我相信很多人是没有回掉函数这个概念的,虽然很多文档和教程中都有提到,但是很多人看完文档也不会用。因为菜鸟的开发任务,都是简单画一下html页面&#x…

分布式定时调度:xxl-job 最佳实践详解

文章目录一、定时任务概述1.1. 什么是定时任务1.2. 常见定时任务方案1.3. 分布式定时任务面临的问题1.4. 分布式定时任务xxl-job二、xxl-job架构设计2.1. 设计思想2.2. 架构设计图三、xxl-job安装3.1.下载源码3.2. 导入数据库3.3. 启动调度中心3.4. 配置部署“执行器项目3.5. 案…

护眼灯有用吗?双十二买什么样的护眼灯真的有效果

对于很多人来说,健康是一个越来越重视的话题,特别是现代社会生活节奏很快,很多人的眼睛都吃不消,所以不管是为了好看,还是为了能够看得足够远,都会注意保护眼睛,所以越来越多的人开始考虑护眼台…

网站变灰,6行代码,通通变灰

人狠话不多,直接上代码 -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: grayscale(100%); filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale1); 通通变灰&…

Java中Map集合体系的基本使用和常用API

文章目录Map集合体系Map集合概述和使用Map集合体系的特点Map集合常用的APIMap集合体系 Map集合概述和使用 Map集合是一种双列集合,每个元素包含两个数据。 Map集合的每个元素的格式:keyvalue(键值对元素)。 Map集合也被称为“键值对集合”。 Map集合整体…

本地代码上传到gitlab

1、在本地代码目录中,鼠标右键Git Bash Here,会打开一个git命令操作窗口; 2、执行git init命令,此命令会在当前目录下创建一个.git文件夹, git init 3、将项目的所有文件添加到仓库中, git add -A 4、将add的文件…

【计算机毕业设计】75.教师工作考核绩效管理系统源码

一、系统截图(需要演示视频可以私聊) 摘 要 随着社会不断进步与发展,生活节奏不断加快,信息已经成为我们生活中不可缺少的一部分,很多学校需要掌握大量的信息来了解特定学生的需求,传统的做法是组织大量的…

如何实现table表头固定但是tbody可以滚动【附源码实例】

【写在前面】经常看到表头固定,表身支持滚动的需求,由于项目经常会用到一些自定义的表格展示数据,之前经常发现每次都是自己去写,自己去重新定义样式,觉得特别的麻烦,现在我特针对这类的分享一下。 1、页面…

【电巢】新能源产业景气度加速向上,功率器件3000亿赛道国产替代已在路上!(附70+厂家名单部分厂家替代型号)

前言 目前消费电子疲软继续蔓延,半导体设计端分化明显,存储、CPU等产品需求延续弱势,但IGBT和SiC等功率器件逐步迎来收获期。半导体周期拐点已至,曙光乍现。 在整个半导体周期背景下,新能源汽车俨然已成为逆势窗口产业…

现在健身耳机哪个牌子好、2023年最好的健身房耳机推荐

很多朋友在运动健身的时候喜欢戴上耳机,在音乐的节奏中去运动,现在市面上的运动耳机选择也特别丰富,但是说实话,从专业角度来看能真正适合运动的蓝牙耳机其实还是比较罕见的。这也就导致了我们许多朋友在选购时特别容易踩坑&#…

React - redux 使用(由浅入深)

React - redux 使用(由浅入深)一. redux理解1. redux 介绍2. redux 使用情况3. redux 工作流程4. redux 三个核心概念4.1 Action4.2 Store4.3 Reducers5. redux 核心API5.1 createStore()5.2 Store5.2.1 Store 方法5.2.1.1 getState()5.2.1.2 dispatch(a…

Kotlin 开发Android app(十八):线程Thread和UI更新

多线程的好处是不言而喻的,它能帮我们刚更多的事情,同时干不同的事情在程序设计中是经常出现的,这种时候我们使用的是线程。 在Kotlin 中,使用的还是原先java 的那一套,用的还是Thread ,可能是在java 中T…

翻译: 如何学习编译器:LLVM Edition

编译器和编程语言是一个很大的话题。您不能只选择学习路径并在某个时候完成它。有许多不同的区域,每个区域都是无穷无尽的。 在这里,我想分享一些有助于学习编译器的链接。这份清单不可能详尽无遗——每个人都很忙,没有人有时间阅读龙书。 …

前端知识大全之CSS

目录 一、概念讲解 学习CSS之前必学的HTML (超链接) 二、正文代码 1.行内样式 2.内部样式(选择器) 3.外部样式 4.样式的优先级 5.简单选择器之定义单个标签(id) 6.简单选择器之定义多个标签&#xff…

低代码平台,企业业务创新的最佳路径

数字化转型的必然趋势及面临的问题 数字经济时代,数字化转型是企业在行业赛道上领先的必经之路,然而,数字化转型升级的道路并不是畅通无阻的,也不是企业单枪匹马就能干成的,各个企业在转型过程中都或多或少会遇到技术…

MySQL-索引

一、介绍 索引是数据库对象之一,用于提高字段检索效率,使用者只需要对哪个表中哪些字段建立索引即可,其余什么都不做,数据库会自行处理。 索引提供指向存储在表的指定列中的数据值的指针,如同图书的目录,…