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

目录

一: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;}@Overridepublic 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;}@Overridepublic 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'第一次出现的位置  6System.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'第一次出现的位置  6System.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(' ');//hellos1.append("world");//hello worlds1.append(123);//hello world123System.out.println(s1);//hello world123System.out.println(s1==s2);//trueSystem.out.println(s1.charAt(0));//获取0号位上的字符  hSystem.out.println(s1.length());//获取字符串的有效长度 14System.out.println(s1.capacity());//获取底层数组的总大小s1.setCharAt(0,'W');//设置任意位置字符 Wello world123s1.insert(0,"haha!!!");//haha!!!Wello world123System.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.mzph.cn/news/114930.shtml

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

相关文章

Easyx趣味编程7,鼠标消息读取及音频播放

hello大家好,这里是dark flame master,今天给大家带来Easyx图形库最后一节功能实现的介绍,前边介绍了绘制各种图形及键盘交互,文字,图片等操作,今天就可以使写出的程序更加生动且容易操控。一起学习吧&…

ARM开发流程LDS相关解惑

最近在学习ARM CPU软硬件开发,对于软件代码执行的入口地址以及软件代码在SRAM中的位置分布有些疑惑,特将学习过程记录一下。 1. 程序入口地址 对于ARM CPU,异常向量表的地址是固定的,通常位于 0x00000000 或 0xFFFF0000。在这种…

算法通过村第十五关-超大规模|黄金笔记|超大规模场景

文章目录 前言对20GB文件进行排序超大文本中搜索两个单词的最短距离从10亿数字中寻找小于100万个数字总结 前言 提示:你生命的前半辈子或许属于别人,活在别人的认为里。那把后半辈子还给自己,去追随你内在的声音。 --荣格 理解了前面的几个题…

sqlserver repalce模糊替换

由于SQL Server的REPLACE函数用于替换字符串中的指定子字符串。它执行的是精确替换,所以想进行模糊替换或基于模式的替换,需要结合REPLACE使用CHARINDEX和SUBSTRING函数。 简单的介绍一下CHARINDEX函数和SUBSTRING函数: CHARINDEX(substrin…

Openssl数据安全传输平台006:粘包的处理-代码框架及实现-TcpSocket.cpp

文章目录 0. 代码仓库1. TCP通信粘包问题2. 粘包、拆包表现形式2.1 正常情况2.2 两个包合并成一个包2.3 出现了拆包 3. 粘包的处理-参考仓库中的文件TcpSocket.cpp3.1 发送数据时候的处理3.2 接收数据时候的处理 0. 代码仓库 https://github.com/Chufeng-Jiang/OpenSSL_Secure_…

Node学习笔记之Express框架

一、express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs. com.cn/ 简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用&…

局域网下多台windows电脑时间同步

windows时间同步 最近在项目中遇见了多台windows电脑的时间同步问题。在这个项目中,有五台电脑,五台电脑处于同一局域网下,其中有一台可以连接互联网(A电脑)。我需要将其他四台电脑(B、C、D、E电脑&#xf…

fail-fast 和 fail-safe 迭代器

fail-fast 和 fail-safe 迭代器是两种不同的迭代器设计策略,用于在遍历集合(如 ArrayList、HashMap)时处理并发修改的情况。它们的行为和应对策略有所不同: Fail-Fast 迭代器: Fail-Fast 迭代器在遍历集合期间&#x…

连接Mumu模拟器使用ADB

要连接Mumu模拟器使用ADB,您可以按照以下详细步骤进行操作: 安装ADB驱动程序:在您的计算机上安装ADB驱动程序。ADB是Android Debug Bridge的缩写,它允许您与Android设备进行通信。您可以从Android开发者网站(https://d…

图论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 递归判断相邻两点的颜色是否一致…

Jenkins 相关内容

Jenkins 相关内容 什么是 Jenkins,它是如何工作的?Jenkins 中自由式项目和管道之间的区别什么是Jenkins管道,它们如何工作?第一次如何安装Jenkins并进行设置?什么是 Jenkins 插件,如何安装它们?…

julia 笔记:复合类型 struct

1 struct关键字 1.1 声明 struct关键字与复合类型一起引入,后跟一个字段名称的块,可选择使用 :: 运算符注释类型 struct Foobarbaz::Intqux::Float64end 没有类型注释的字段默认为 Any 类型,所以可以包含任何类型的值。 1.2 创建新对象 …

IO/NIO交互模拟及渐进式实现

IO IO Server public class SocketServer {public static void main(String[] args) {//server编号和client编号对应,优缺点注释在server端//server1();//server2();server3();}/*** server1的缺点:* 1、accept()方法阻塞了线程,要等客户端…

2023年09月青少年软件编程C语言二级真题答案——持续更新.....

数组指定部分逆序重放 将一个数组中的前k项按逆序重新存放。例如,将数组8,6,5,4,1前3项逆序重放得到5,6,8,4,1。 时间限制:1000 内存限制:65536 输入 输入为两行: 第一行两个整数,以空格分隔,分别为数组元素的个数n(1 < n < 100)以及指定的k(1 <= k <= n)。…

【Qt之JSON文件】QJsonDocument、QJsonObject、QJsonArray等类介绍及使用

Qt之JSON相关类介绍 QJsonDocument常用函数枚举类型 QJsonDocument::DataValidation枚举类型 QJsonDocument::JsonFormat构造函数静态函数成员函数示例 QJsonObject常用函数构造函数&#xff1a;成员函数&#xff1a; QJsonObject 与 QVariantMap 相互转换 QJsonArray常用函数构…

无论有没有按钮,iPhone都可以进行截屏操作!如何在iPhone上截屏

通过简单的按键组合&#xff0c;可以很容易地将iPhone屏幕的图片捕获到图像文件中&#xff0c;并保存到照片库中。以下是操作方法。 什么是屏幕截图 屏幕截图是指通常包含你在设备屏幕上看到的内容的精确副本的图像。在设备内拍摄的数字屏幕截图通常使用相机拍摄物理屏幕的照…

AD9371 官方例程HDL详解之JESD204B TX_CLK生成 (二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

HTTPS、SSL/TLS,HTTPS运行过程,RSA加密算法,AES加密算法

1、为什么网站要使用安全证书 我们所处的网络环境是复杂多样的&#xff0c;大致分为两类&#xff0c;一类是可信的网络服务商&#xff0c;比如直接连的电信运营商的网络&#xff0c;网线&#xff0c;4G&#xff0c;5G&#xff1b;另一类是不可信的网络&#xff0c;比如WIFI&am…

Linux笔记之diff工具软件P4merge的使用

Linux笔记之diff工具软件P4merge的使用 code review! 文章目录 Linux笔记之diff工具软件P4merge的使用1.安装和配置2.使用&#xff1a;p4merge a.cc b.cc3.配置git 参考博文: Ubuntu Git可视化比较工具 P4Merge 的安装/配置及使用 1.安装和配置 $ wget https://cdist2.per…

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码 测试环境&#xff1a;宝塔、Linux、PHP7.2、MySQL5.6 根目录 public&#xff0c;伪静态 thinkphp&#xff0c;php需要Redis扩展 后台&#xff1a;/stf 账号&#xff1a;admin 密码&#xff1a;123123 *后台…