【Java基础语法】字符修改,以及equals的用法

前言:

小编这里将上一期String类型进行了补充,添加了字符串的修改,以及equals的用法内容,和hashcode的使用;上一期:http://t.csdnimg.cn/ijiM6

 1.字符串的修改

在上一期中我们说到字符串是不能被修改的,所以所有操作都是在新的对象中操作的;

那么如果我们要修改字符串如果用一下代码如何呢?

        String sr="123";sr+="456";System.out.println(sr);

 但是这种方式不推荐使用,因为其效率非常低,中间创建了好多临时对象。

所以我们就要借助StringBuffer 和 StringBuilder

如下代码所示:

long start=System.currentTimeMillis();String s1="";for (int i = 0; i <10000 ; i++) {s1+=i;}long end=System.currentTimeMillis();System.out.println(end-start);long start1=System.currentTimeMillis();StringBuffer stringBuffer=new StringBuffer("");for (int i = 0; i <10000 ; i++) {stringBuffer.append(i);}long end1=System.currentTimeMillis();System.out.println(end1-start1);long start2=System.currentTimeMillis();StringBuilder stringBuilder=new StringBuilder("");for (int i = 0; i <10000 ; i++) {stringBuffer.append(i);}long end2=System.currentTimeMillis();System.out.println(end2-start2);

运行结果

265

1

可以看出,在完成循环时的消耗的毫秒数相差甚远。

StringBufferd的用法

1.StringBuffer append(String str):
在尾部追加,相当于 String += ,可以追加: boolean char char[]
double float int long Object String StringBuff 的变量

例如:

        StringBuffer stringBuffer=new StringBuffer("123");stringBuffer.append("456");System.out.println(stringBuffer);

这里和‘+’法差不多,但是使用的一直是一个对象。 

2.setCharAt(int index, char ch)

index 位置的字符设置为 ch
        StringBuffer stringBuffer=new StringBuffer("123");stringBuffer.setCharAt(0,'3');System.out.println(stringBuffer);

 输出:323

3.int indexOf(String str)
返回 str 第一次出现的位置
int indexOf(String str, int fromIndex)
fromIndex 位置开始查找 str 第一次出现的位置
int lastIndexOf(String str) 
返回最后一次出现 str 的位置
int lastIndexOf(String str, int fromIndex)
fromIndex 位置开始找 str 最后一次出现的位置

这些和String类用法一样,小编上期已经讲解过了,在这里不再赘述。

4.StringBuff insert(int offset, String str)

offset 位置插入:八种基类类型 & String 类型 & Object 类型数据

 

代码如下:

        StringBuffer stringBuffer1=new StringBuffer("aaabbbcccaaabbbccc");stringBuffer1.insert(0,"123");System.out.println(stringBuffer1);

输出:123aaabbbcccaaabbbccc

5.StringBuffer deleteCharAt(int index)

删除 index 位置字符
StringBuffer delete(int start, int end)
删除 [start, end) 区间内的字符

 

 代码如下:

        StringBuffer stringBuffer1=new StringBuffer("aaabbbcccaaabbbccc");StringBuffer stringBuffer2=new StringBuffer("aaabbbcccaaabbbccc");stringBuffer1.delete(0,3);stringBuffer2.deleteCharAt(3);System.out.println(stringBuffer1);System.out.println(stringBuffer2);

输出:

bbbcccaaabbbccc

aaabbcccaaabbbccc

注意: 区间是左闭右开;

6.StringBuffer replace(int start, int end, String str)
[start, end) 位置的字符替换为 str

代码如下:

StringBuffer stringBuffer2=new StringBuffer("aaabbbcccaaabbbccc");stringBuffer2.replace(0,3,"AAA");System.out.println(stringBuffer2);

输出:

 AAAbbbcccaaabbbccc 

7.String substring(int start)
start 开始一直到末尾的字符以 String 的方式返回
String substring(int start,int end)
[start, end) 范围内的字符以 String 的方式返回

 代码如下:

 StringBuffer stringBuffer1=new StringBuffer("aaabbbcccaaabbbccc");StringBuffer stringBuffer2=new StringBuffer("aaabbbcccaaabbbccc");String s1= stringBuffer1.substring(3);String s2= stringBuffer2.substring(3,6);System.out.println(s1);System.out.println(s2);

 输出:

bbbcccaaabbbccc
bbb

8.StringBuffer reverse()

反转字符串

 代码如下:

StringBuffer stringBuffer1=new StringBuffer("12345");
stringBuffer1.reverse();
System.out.println(stringBuffer1);

输出:

54321

9. to String()

转String类型

代码实例:

 StringBuffer stringBuffer1=new StringBuffer("12345");String str=stringBuffer1.toString();System.out.println(str);

总结: 

从上述例子可以看出: String和 StringBuilder最大的区别在于String 的内容无法修改,而
StringBuilder 的内容可以以修改。(StringBuilder与StringBuffer用法基本一致 
频繁修改字符串的情况考虑使用 StringBuilder
注意: String StringBuilder 类不能直接转换。如果要想互相转换,可以采用如下原则 :
String 变为 StringBuilder: 利用 StringBuilder 的构造方法或 append() 方法
StringBuilder 变为 String: 调用 toString() 方法。

2.equals的使用

在Java中,==进行比较时:
如果==左右两侧是基本类型变量,比较的是变量中值是否相同
如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同
如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址比

使用引用中的地址直接来进行比较。

例如:

public class test1 {public static void main(String[] args) {Person person1=new Person("小明",15);Person person2=new Person("小明",15);System.out.println(person2==person1);System.out.println(person2.equals(person1));}
}
class Person{public String name;public int age;public Person(String name,int age){this.age=age;this.name=name;}
}

 输出:

false

false

 所以我们此时重写equals方法

class Person{public String name;public int age;public Person(String name,int age){this.age=age;this.name=name;}public boolean equals(Object obj){Person person=(Person) obj;return this.name.equals(person.name)&&this.age==person.age;}
}

此时输出:

false

true 

3.hashcode方法

作用:hashCode()方法帮我算了一个具体的对象位置。

hashcode方法源码:

public native int hashCode();

 该方法是一个native方法,底层是由C/C++代码写的。我们看不到。
我们认为两个名字相同,年龄相同的对象,将存储在同一个位置,如果不重写hashcode()方法,我们可以来看示例代码:

public class test1 {public static void main(String[] args) {Person person1=new Person("小明",15);Person person2=new Person("小明",15);System.out.println(person2.hashCode());System.out.println(person1.hashCode());}
}
class Person{public String name;public int age;public Person(String name,int age){this.age=age;this.name=name;}public boolean equals(Object obj){Person person=(Person) obj;return this.name.equals(person.name)&&this.age==person.age;}
}

输出:

1163157884
1956725890

与equals方法一样,我们重写其方法:

class Person{public String name;public int age;public Person(String name,int age){this.age=age;this.name=name;}@Overridepublic int hashCode() {return Objects.hash(name,age);}

输出:

23458769
23458769 

 4.总结

小编对于String类进行了一次补充,但是hashcode是数据结构的内容,小编只是简单说明了一下其重写和作用,并没有深入讲解。

限于小编能力有限,可能有些地方存在错误,希望各位uu提出宝贵意见。

制作不易,麻烦给小编一个小小的赞吧。

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

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

相关文章

计算机视觉项目-2024年第3号超强台风“格美”登陆福建带来大暴雨造成城市积水,通过模型识别路段积水避开积水道路

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉项目-2024年第3号超强台风“格美”登陆福建带来大暴雨造成城市积水&#xff0c;通过模型识别路段积水避开积水道路。今年第3号台风“格美”(强台风级)的中心今天(24日)早晨5点钟位于我国台湾省宜兰县东南…

多表查询的内连接与外连接

目录 1. 内连接 1.1 概述 1.2 等值连接 1.3 非等值连接 1.4 自连接 2. 外连接 2.1 概述 2.2 左/右连接 2.3 全连接 3. 多张表连接 1. 内连接 1.1 概述 查询满足条件的两张表数据&#xff0c;也就是两张表的交集&#xff1b; 内连接使用过程中&#xff0c;尽量对表重…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…

董宇辉离职,我一点都不意外!只不过感觉来的太快

下面这张图&#xff0c;是我在半年多前写的一段随笔&#xff0c;没想到来的这么快&#xff01; 碰巧的是今天中午&#xff0c;在开发者群里有两位老铁自曝&#xff0c;本以为能公司干到老&#xff0c;但公司却不给机会&#xff0c;已经不在是公司员工了。 最近&#xff0c;晓衡…

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网&#xff0c;在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载&#xff0c;因为服务器在国外&#xff0c;国内不支持&#xff0c;所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…

我澄清下,大数据界面虽然有点花,但对趋势的判断还是很准的!

我澄清下&#xff0c;大数据界面虽然有点花&#xff0c;但对趋势的判断还是很准的&#xff01; 艾斯视觉的观点认为&#xff1a;在这个充满不确定性的世界里&#xff0c;大数据就像一位智者&#xff0c;透过那些令人眼花缭乱的界面&#xff0c;总能以它独到的洞察力&#xff0…

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法&#xff08;Least Squares Metho…

遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....

websocket 是一种双向通信协议&#xff0c;在建立连接后&#xff0c;websocket服务端和客户端都能主动向对方发送或者接收数据&#xff0c;而在http协议中&#xff0c;一个request只能有一个response&#xff0c;而且这个response也是被动的&#xff0c;不能主动发起。 websoc…

常见的jmeter面试题及答案

1、解释什么是JMeter? JMeter是一款Java开源工具&#xff0c; 用于性能负载测试。它旨在分析和衡量Web应用程序和各种服务的性能和负载功能行为。 2、说明JMeter的工作原理? JMeter就像一群将请求发送到目标服务器的用户-样。它收集来自目标服务器的响应以及其他统计数据&…

WARNING: Ignoring invalid distribution -ip警告信息如何去掉?

查看已安装依赖列表的时候&#xff0c;出现了很多警告信息&#xff0c;如何去掉呢&#xff1f; 解决办法 打开这个路径&#xff1a;d:\software\python\python39\lib\site-packages 这种波浪线开头的&#xff0c;我们将它删除掉,就可以了。

结构体,联合体,指针和浮点代码笔记

系列文章 : 深入理解计算机系统笔记 文章目录 系列文章3.9 异质的数据结构3.9.1 结构3.9.2 联合3.9.3 数据对齐 3.10 在机器级程序中将控制和数据结合起来3.10.1 理解指针3.10.2 应用&#xff1a;使用GDB调试器3.10.3 内存越界引用和缓冲区溢出3.10.4 对抗缓冲区溢出攻击3.10…

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、前言 在 MATLAB 中进行绘图是一种非常常见且实用的操作&#xff0c;可以用来可视化数据、结果展示、分析趋势等。通过 MATLAB 的绘图功能&#xff0c;用户可以创建各种类型的图形&#xff0c;包括线图、散点图、柱状图、曲线图等&#xff0c;以及三维图形、动画等复杂的可视…

京东云ifrit-agent占用80端口问题

即使停止服务后还是会自动重启&#xff0c;网上查找无果后询问京东云客服&#xff0c;人家服务蛮好&#xff0c;回复很快 解决办法 centos7&#xff1a; 停止服务 systemctl stop ifritd 卸载 rm -rf /usr/local/share/jcloud/ifrit centos 6: 停止服务 cd /usr/local…

Windows系统安装FinalShell

一、下载 通过百度网盘分享的文件&#xff1a;finalshell_install.exe 链接&#xff1a;https://pan.baidu.com/s/1_vcb_t-Cp4TZSN4nWUmLww 提取码&#xff1a;d6v8 二、安装 三、远程连接Linux系统 (1)打开VMware虚拟机 右键空白区域&#xff0c;点击open Terminal 输入命令…

AI/机器学习(计算机视觉/NLP)方向面试复习3

1. Pooling 有哪些方式&#xff1f;pytorch的实现&#xff1f; Pooling可以分成&#xff1a;最大池化&#xff0c;平均池化&#xff0c;全局平均池化&#xff0c;随机池化&#xff0c;空间金字塔池化。 1. 最大池化&#xff08;Max Pooling&#xff09; 最大池化是最常用的池…

YOLOv8魔改核心-模型yaml文件解析与网络结构打印

前言 本篇文章主要用于记录学习YOLOv8中网络模型yaml文件&#xff0c;我们一般只知道如何去训练模型&#xff0c;和配置yaml文件&#xff0c;但是对于yaml文件是如何输入到模型里&#xff0c;模型如何将yaml文件解析出来的确是不知道的&#xff0c;下面我们从yaml文件来讲解&a…

C语言同时在一行声明指针和整型变量

如果这么写&#xff0c; int *f, g; 并没有声明2个指针&#xff0c;编译器自己会识别&#xff0c;f是一个指针&#xff0c;g是一个整型变量&#xff1b; void CTszbView::OnDraw(CDC* pDC) {CTszbDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for nat…

Java算法之递归算法-如何计算阶乘的值

上一篇学了递归之后&#xff0c;练习一下递归算法。 题目&#xff1a;使用递归算法计算阶乘的值&#xff0c;也就是5&#xff01;5*4*3*2*1&#xff0c;直接使用循环是非常简单的&#xff0c;这边练习一下递归算法。 先写一下两个条件 基线条件&#xff1a;等于1的时候返回1…

学习C语言第十四天(指针练习)

1.第一题C 2.第二题C 3.第三题 00345 short类型解引用一次访问两个字节 4.第四题 6&#xff0c;12 5.第五题C 6.第六题 下面代码结果是0x11223300 7.第七题 int main() {int a 0;int n 0;scanf("%d %d",&a,&n);int i 0;int k 0;int sum 0;for (i 0;…

Docker 搭建Elasticsearch详细步骤

本章教程使用Docker搭建Elasticsearch环境。 一、拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.8.2二、运行容器 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-n