【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图形库最后一节功能实现的介绍,前边介绍了绘制各种图形及键盘交互,文字,图片等操作,今天就可以使写出的程序更加生动且容易操控。一起学习吧&…

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

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

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…

图论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 插件,如何安装它们?…

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

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

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

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

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

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

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

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

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

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

数据结构: map与set的简单实现

目录 map与set的模拟实现 1.基本框架 2.模拟实现map与set所需要做的事 1.使用模板 , 达到泛性编程 2.比较问题 3.迭代器 RBTree中: operator operator-- 4.map [ ] 的实现 5.使用普通迭代器构造const迭代器 效果 map与set的模拟实现 1.基本框架 map set 2.模拟实…

【iOS】MVC模式

MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,ta最早出现在SmallTalk语言中。现在,很多计算机语言和架构都采用了MVC模式。 MVC模式概述 MVC模式是一种设计模式,由3部分组成…

【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本

文章目录 1. 版本选择2. 用脚手架快速生成微服务的pom.xml3. 创建一个父工程4. 代码地址 本文描述如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本。 1. 版本选择 我们知道Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本选择一致性非常重…

【ML】cheatsheet

LR 原理与面试题目DT, Adaboost, GBDT, xgboost 原理 细节 与 例子 https://www.cnblogs.com/createMoMo/p/12635709.html xgboost挺详细的算法原理与例子 https://zhuanlan.zhihu.com/p/660468945 着重lightgbm就xgboost的改善方向 https://zhuanlan.zhihu.com/p/366952043机器…

《计算机视觉中的多视图几何》笔记(14)

14 Affine Epipolar Geometry 本章主要是在仿射摄像机的情况下重新考虑对极几何,也就是仿射对极几何。 仿射摄像机的优点是它是线性的,所以很多最优化算法可以用线性代数的知识解决。如果是一般的投影摄像机,很多算法就不是线性的了&#x…

IDEA 新版本设置菜单展开

使用了新版本的IDEA 新UI后,常用的file,view,菜单看不见了,不太适应,找了一下,有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上,应用保存就可以了

CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)

CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表(Cascading Style Sheets)。下面是一些常用的CSS3属性及其详细解释: border-radius:设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径,也可…

flink中使用GenericWriteAheadSink的优缺点

背景 GenericWriteAheadSink是flink中提供的实现几乎精确一次输出的数据汇抽象类,本文就来看一下使用GenericWriteAheadSink的优缺点 GenericWriteAheadSink的优缺点 先看一下GenericWriteAheadSink的原理图 优点: 几乎可以精确一次的输出&#xf…