【JavaEE重点知识归纳】第10节:Object类和String类

news2024/12/25 13:32:05

目录

一:Object类

1.概念

2.获取对象信息

3.对象比较equals方法

4.hashCode方法

二:String类

1.String类的重要性

2.常用方法

3.StringBuilder和StringBuffer


一:Object类

1.概念

(1)Object类是Java默认提供的类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Obiect父类。即所有的类的对象都可以使用Object的引用进行接收

(2)Object类是参数的最高统一类型。是所有类的父类。

2.获取对象信息

(1)如果要打印对象中的内容,可以直接重写Object类中的toString()方法

(2)Object类中的toString()

3.对象比较equals方法

(1)在Java中,进行比较时:

        1)如果==左右两侧是基本类型变量,比较的是变量中的值是否相同

        2)如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同

        3)如果要比较对象中的内容,必须重写Object中的equals方法默认也是按照地址比较的

(2)equals没有被重写时:

class Person{
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1=new Person("张三",18);
        Person person2=new Person("张三",18);
        int a=10,b=10;
        System.out.println(a==b);
        System.out.println(person1==person2);
        System.out.println(person1.equals(person2));
    }
}

 (3)equals被重写时:

比较对象中的内容是否相同的时候,一定要重写equals方法 

class Person{
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj==null){
            return false;
        }
        if(obj==this){
            return true;
        }
        if(!(obj instanceof Person)){
            return false;
        }

        Person person=(Person)obj;
        return this.name.equals(person.name)&&this.age==person.age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1=new Person("张三",18);
        Person person2=new Person("张三",18);
        int a=10,b=10;
        System.out.println(a==b);
        System.out.println(person1==person2);
        System.out.println(person1.equals(person2));
    }
}
4.hashCode方法

(1)hashCode方法是一个native方法,底层是由C/C++代码写的

(2)hashCode方法用来判断对象在存储位置是否相同

(3)事实上hashCode()在散列表中才有用,其他情况下没用。在散列表中hashCode()的作用是获取对象的散列码,进而确定该对象在散列表中的位置

(4)hashCode没有被重写时:

class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1=new Person("张三",18);
        Person person2=new Person("张三",18);
        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
    }
}

(5)hashCode被重写时:

import java.util.Objects;

class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name,age);
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1=new Person("张三",18);
        Person person2=new Person("张三",18);
        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
    }
}

二:String类

1.String类的重要性

(1)C语言中没有字符串类型,只能使用字符数组和字符指针来表示

(2)由于字符串非常重要,应用广泛,因此Java提供了专门的String类

2.常用方法

(1)字符串构造

        1)常用的三种构造方式

        2)String 是引用类型,本身不存储字符串本身;在Java中,用" "引起来的也是String类型

(2)String对象的比较

        字符串的比较是常见操作之一,比如,字符串排序,在Java中给出了4种方式

        1)==比较是否引用同一个对象:对于基本数据类型,==比较的是变量中的值;对于引用类型,==比较的是引用中的地址

        2)boolean equals(Object o):按照字典序(字符大小顺序)比较:String类重写了父类Object中的equals方法,Object中的equals默认是==比较,String重写了equals方法后,会对对象中的内容进行比较

        3)int compareTo(String s):按照字典序(字符大小顺序)比较:a.如果出现不等的字符,直接返回这两个字符的大小差值 b.如果前K个字符相等,返回值两个字符串长度差值

        4)int compareToIgnoreCase(String s):与compareTo方式相同,但是忽略大小写直接比较

(3)字符串查找

public class Test{
    public static void main(String[] args) {
        String s="aaabbbcccaaabbbccc";
        System.out.println(s.charAt(3));//'b'
        System.out.println(s.indexOf('c'));//返回'c'第一次出现的位置  6
        System.out.println(s.indexOf('c',10));//从下标为10的位置开始找‘c’第一次出现的位置
        System.out.println(s.indexOf("bbb"));//返回“bbb”第一次出现的位置
        System.out.println(s.indexOf("bbb",10));//从下标为10的位置开始找"bbb"第一次出现的位置
        System.out.println(s.lastIndexOf('c'));//从后往前找,返回'c'第一次出现的位置  6
        System.out.println(s.lastIndexOf('c',10));//从后往前找,从下标为10的位置开始找‘c’第一次出现的位置
        System.out.println(s.lastIndexOf("bbb"));//从后往前找,返回“bbb”第一次出现的位置
        System.out.println(s.lastIndexOf("bbb",10));//从后往前找,从下标为10的位置开始找"bbb"第一次出现的位置
    }
}

(4)转化

        1)数值和字符串转化

  

        2)字符串转数组

        3)格式化

(5)字符串替换:使用新的字符串替换掉已有的字符串数据

(6)字符串拆分:将一个完整的字符串按照指定的分隔符划分为若干个字符串

(7)字符串截取

        1)从一个完整的字符串之中截取部分内容

        2)

(8)其他操作方法

        1)trim会去掉字符串中开头和结尾的空白字符(空格、换行、制表符等)中间的去不了

        2)大小写转换

     

(9)字符串的不可变性

        1)String类在设计的时就是不可变的,String类实现描述中已经说明了

                a.String类被final修饰,表明该类不能被继承

                b.value被final修饰了,表明value自身的值不能改变,即value不能引用别的对象,但是其引用对象中的内容是可以被修改的

        2)所有涉及到字符串内容的操作都是创建一个新对象,改变的是新对象

(10)字符串修改

        尽量避免直接对String类型对象进行修改,因为String类是不能被修改的,所有的修改都会创建新法人对象,效率非常低下。

3.StringBuilder和StringBuffer

(1)由于String的不可更改特性,为了方便字符串的修改,Java又提供了StringBuilder和StringBuffer类。这两个类大部分是相同的,这里介绍StringBuilder常用的一些方法

(2)

ps:详细的大家可以上网查查

(3)

public class Test{
    public static void main(String[] args) {
        StringBuilder s1=new StringBuilder("hello");
        StringBuilder s2=s1;

        //尾插:字符、字符串、整型数字
        s1.append(' ');//hello
        s1.append("world");//hello world
        s1.append(123);//hello world123
        System.out.println(s1);//hello world123
        System.out.println(s1==s2);//true

        System.out.println(s1.charAt(0));//获取0号位上的字符  h
        System.out.println(s1.length());//获取字符串的有效长度 14
        System.out.println(s1.capacity());//获取底层数组的总大小
        s1.setCharAt(0,'W');//设置任意位置字符 Wello world123
        s1.insert(0,"haha!!!");//haha!!!Wello world123
        System.out.println(s1);

        System.out.println(s1.indexOf("123"));//获取123第一次出现的位置
        System.out.println(s1.lastIndexOf("123"));//获取123最后一次出现的位置

        s1.deleteCharAt(0);//删除首元素
        s1.delete(0,3);//删除[0,3)范围内的字符

        String str =s1.substring(0,5);//截取[0,5)区间的的字符以String的方式返回
        System.out.println(str);

        System.out.println(s1.reverse());//字符串逆转
        str=s1.toString();//将StringBuilder以字符串的方式返回
        System.out.println(str);

    }

}

(4)String和StringBuilder的最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改,频繁修改字符串的情况可以考虑使用StringBuilder

(5)String和StringBuilder类不能直接转换。如果想转换的话,可以采用下面的方法

        1)String变为StringBuilder,利用StringBuilder的构造方法或append()

        2)StringBuilder变为String:调用toString()方法

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

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

相关文章

剑指Offer || 052.递增顺序搜索树

题目 给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。 示例 1: 输入:root [5,3,6,2,4,null,8,1,n…

hackbar基于插件的网络渗透测试工具

一、安装 安装:通过Firefox在插件扩展里面找到hackbar v2进行安装(注意hackerbar是收费的;v2不是) 安装成功示例: 二、基本使用 1.Load URL 解释:将当前网页的url自动填充到多行文本框里面 2.Split URL 解释:自动…

22下半年下午题

声明:哔哩哔哩视频笔记 源地址 第一大题题目 第一大题解答 第一小问 根据0层数据流图来找,看数据流向和相应的处理模块匹配。并且这个第一问,肯定是能在说明中找到对应短语作为答案的。 第二小问 搞清楚具体存储数据的信息名字&#xff…

数据结构:二叉树(3):相关oj题目

二叉树oj题的续 目录 102. 二叉树的层序遍历 - 力扣(LeetCode) 236. 二叉树的最近公共祖先 - 力扣(LeetCode) 方法1 方法2 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) 106. 从中序与后序…

图论03-【无权无向】-图的深度优先DFS遍历-路径问题/检测环/二分图

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 路径问题的优化-提前结束递归4.1 思路4.2 主要代码 5. 检测环5.1 思路5.2 主要代码 6. 二分图6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 递归判断相邻两点的颜色是否一致…

java--Consumer的使用

一、目的 因为代码中用到了Consumer ,所以特地来梳理其对应的用法以及总结。 二、介绍 Consumer 是一个函数式接口,它位于java.util.function 包中,它定义了一个名为accept 的抽象方法,该方法接受一个参数并且不返回任何结果。 …

【C++和数据结构】模拟实现哈希表和unordered_set与unordered_map

目录 一、哈希的概念与方法 1、哈希概念 2、常用的两个哈希函数 二、闭散列的实现 1、基本结构: 2、两种增容思路 和 插入 闭散列的增容: 哈希表的插入: 3、查找 4、删除 三、开散列的实现 1、基本结构 2、仿函数Hash 3、迭代器…

sealos 部署halo

首先创建数据库 postgresql 找到连接数据库,点击详情查看数据库的参数 部署halo应用 halohub/halo:2.5 高级配置里设置环境变量 本地存储 配置 Halo 环境变量环境变量 spring.sql.init.platformpostgresql spring.r2dbc.urlr2dbc:pool:postgresql://postgres:4w…

在 Python 中使用 Pillow 进行图像处理【3/4】

第三部分 一、腐蚀和膨胀 您可以查看名为 的图像文件dot_and_hole.jpg,您可以从本教程链接的存储库中下载该文件: 该二值图像的左侧显示黑色背景上的白点,而右侧显示纯白色部分中的黑洞。 侵蚀是从图像边界去除白色像素的过程。您可以通过使用…

运算符重载的三种实现方法

一、重载为一般函数 格式:返回类型 operator 运算符(参数列表) struct Complex{//定义一个复数结构:包括实部与虚部两部分 double real;//实部 double imag;//虚部 }; Complex operator(Complex c1,Complex c2){//对加法运算的重载:将运算符…

扩展字符串(acwing周赛第三题)

代码&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long LL; const int N 1e510; const LL INF 2e18; LL len[N];string s"DKER EPH VOS GOLNJ ER RKH HNG OI RKH UOPMGB CPH VOS FSQVB DLMM VOS QETH SQB"; string a"DKER …

2023全新小程序广告流量主奖励发放系统源码 流量变现系统

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件&#xff0c;吃瓜视频&#xff0c;或其他资源内容&#xff0c;通过用户付费买会员来变现&#xff0c;用户需要付费&#xff0c;有些人喜欢白嫖&#xff0c;所以会流失一部分用户&#xff0c;所以就写了这个系统…

TCP--滑动窗口

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 接收端和发送端通过窗口来实现流量的控制。发送端维护一个发送窗口&#xff0c;接收端维护一个…

Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒&#xff0c;同样可以通过Spider获取网站内容&#xff0c;最近学习了SeleniumPhantomjs后&#xff0c;准备利用它们获取百度百科的旅游景点消息盒&#xff08;InfoBox&#xff09;&#xff0c;这也是毕业设计实体对齐和属…

邻接表存储图或者树

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 介绍 每个顶点都作为头节点&#xff0c;并且存在一个一维数组中h[N]。树就是相当于一种有向图…

进阶高级,接口+接口自动化测试疑难解答,一篇带你策底打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、你们做接口测试…

MapReduce编程:join操作和聚合操作

文章目录 MapReduce 编程&#xff1a;join操作和聚合操作一、实验目标二、实验要求及注意事项三、实验内容及步骤 附&#xff1a;系列文章 MapReduce 编程&#xff1a;join操作和聚合操作 一、实验目标 理解MapReduce计算框架的分布式处理工作流程掌握用mapreduce计算框架实现…

python调用astra进行人脸检测(使用CascadeClassifier)

1、简述 方法&#xff1a;使用opecv中&#xff0c;CascadeClassifier 级联分类器实现人脸检测&#xff0c;CascadeClassifier就是opencv下objdetect模块中用来做目标检测的级联分类器的一个类&#xff0c;它可以帮助我们检测例如车牌、眼睛、人脸等物体。它的大概原理就是判别…

C++17中std::string_view的使用

为了解决std::string初始化(或拷贝)成本高昂的问题&#xff0c;C17引入了std::string_view。std::string_view提供对现有字符串(C风格字符串、std::string、或另一个std::string_view)的只读访问&#xff0c;而无需进行拷贝。当想要有效地处理和操作字符串而不修改它们时&#…

用python计算积分

先安装这个包 pip install scipy运行 import tkinter as tk from scipy.integrate import quad# 创建主窗口 root tk.Tk() root.title("积分计算器")# 定义计算积分的函数 def calculate_integral():# 获取用户输入的函数表达式function function_entry.get()# 获…