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

news2024/12/23 8:41:20

前言:

小编这里将上一期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;
    }
    @Override
    public int hashCode() {
        return Objects.hash(name,age);
    }

输出:

23458769
23458769 

 4.总结

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

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

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

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

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

相关文章

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

目录 1. 问题所示2. 原理分析2.1 RouterFunctionConfiguration 类2.2 SwaggerResourceHandler 类3. 解决方法3.1 网关过滤3.2 去除配置3.3 代码修改4. 彩蛋1. 问题所示 从而也导致资源接口文件泄露 https://xxx/swagger-resources 或者 ip:端口号/swagger-resources 2. 原理分…

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

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

ElasticSearch搜索

ES搜索 elastic search 一套搜索引擎技术,主要技术栈包括 Elasticsearch&#xff1a;用于数据存储、计算和搜索 Kibana&#xff1a;用于数据可视化 在数据库模糊查询中,因为不走索引,所以效率很低,而在搜索引擎中,不仅效率高,而且即使出现个别错字,或者用拼音搜索,甚至用同…

自定义Observal返回数据

在写Angular项目的时候&#xff0c;很多都是用的Observal,但是有时候我们在接口还没好 &#xff0c;或者处理有些接口我们想要通过方法在observal返回特定的数据&#xff0c;这个时候要我们可以如下处理&#xff1a; 方法一、通过of返回 方法二&#xff1a;通过Observable的cr…

【Rust】所有权OwnerShip

什么是所有权 rust使用由编译器检查的一些规则构成的所有权系统来管理内存。且这不会影响程序的运行效率。 所有权规则 rust中每一个每一个值都有一个owner。在同一时刻&#xff0c;只能有一个owner。当这个owner超过范围&#xff0c;则该值会被丢弃。 String类型 为什么需…

Unity UGUI 之 自动布局组件

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是自动布局组件…

vue3 使用Mock

官网: http://mockjs.com/ 安装 npm install mockjs -Dsteps1: main.js 文件引入 import /api/mock.jssteps2: src/api/mock.js import Mock from mockjs import homeApi from ./mockData/home /*** 1.拦截的路径:mock拦截了正常NetWork/网络请求,数据正常响应* 2.方法* …

22 Python常用内置函数——枚举

enumerate() 函数用来枚举可迭代对象中的元素&#xff0c;返回可迭代的 enumerate 对象&#xff0c;其中每个元素都是包含索引和值的元组。 print(enumerate(abcd)) print(list(enumerate(abcd))) # 枚举字符串中的元素 print(list(enumerate([hello, world]))) # 枚举列表中…

Mongodb文档和数组的通配符索引

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第97篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

前端canvas——赛贝尔曲线

曲线之美&#xff0c;不在于曲线本身&#xff0c;而在于用的人。 所以就有了这期赛贝尔曲线。 新规矩&#xff0c;先上个GIT。 效果图 开局一张图&#xff0c;代码全靠编。 代码 画骨 先想着怎么画一个心形吧&#xff0c;等你想好了&#xff0c;就知道怎么画了。 首先就还…

SearchGPT vs Google SearchGPT vs Perplexity 2024年AI搜索引擎评价测评

medium: https://medium.com/p/f7c9481efa50 SearchGPT User ReviewsSearchGPT VS GoogleSearchGPT VS Perplexity AI搜索引擎领域越来越多玩家参与&#xff0c;比如Google的Gemini OpenAI发布的SearchGPT以及Perplexity AI。OpenAI刚刚发布和SearchGPT&#xff0c;希望通过搜…

Internet Download Manager2024功能特点优势分析及使用建议及注意事项

1. Internet Download Manager简介 2. 功能特点 3. 优势分析 4. 专家评价 5. 使用建议及注意事项 6. 常见问题解答 7. 用户反馈及案例分享 8. IDM下载器的未来发展趋势 文章&#xff1a; 在互联网快速发展的今日&#xff0c;人们对于网络资源的获取和利用越来越频繁。无论…

智能合约在能源行业中的应用:促进可再生能源的发展与利用

随着全球能源需求的增长和环境保护意识的提升&#xff0c;可再生能源作为替代传统能源的重要选择&#xff0c;正逐步成为能源供应的主流。本文将探讨智能合约在能源行业中的应用&#xff0c;特别是如何通过智能合约促进可再生能源的发展与利用。 可再生能源的重要性与挑战 可再…

亚信安慧AntDB数据库与用友Yon BIP商业创新平台完成兼容性互认证

近日&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09;自主研发的AntDB数据库产品&#xff0c;与用友网络科技股份有限公司&#xff08;简称&#xff1a;用友网络&#xff09;的Yon BIP用友商业创新平台完成了兼容性互认证。经过双方技术…

【四】jdk8基于m2芯片arm架构Ubuntu24虚拟机下载与安装

文章目录 1. 安装版本2. 开始安装3. 集群安装 1. 安装版本 如无特别说明&#xff0c;本文均在root权限下安装。进入oracle官网&#xff1a;https://www.oracle.com/java/technologies/downloads/找到最下面Java SE 看到java 8&#xff0c;下载使用 ARM64 Compressed Archive版…

Logitech Media Server已更名为Lyrion Music Server

还以为是个新软件&#xff0c;折腾之后来才发现 &#xff0c;Lyrion Music Server 原名叫 Logitech Media Server&#xff0c;只是现在它已不再由 Logitech 拥有和维护&#xff0c;已完全移交给社区&#xff0c;因此更名&#xff0c;但简称依然还是 LMS。镜像目前还是延续了 lo…

一天搞定React(5)——ReactRouter(下)【已完结】

Hello&#xff01;大家好&#xff0c;今天带来的是React前端JS库的学习&#xff0c;课程来自黑马的往期课程&#xff0c;具体连接地址我也没有找到&#xff0c;大家可以广搜巡查一下&#xff0c;但是总体来说&#xff0c;这套课程教学质量非常高&#xff0c;每个知识点都有一个…

全球“微软蓝屏”事件:IT基础设施韧性与安全性的考验

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Firefox扩展程序和Java通信

实现Firefox扩展程序&#xff0c;和Java RMI Client端进行通信。 在Firefox工具栏注册按钮&#xff0c;点击按钮后弹出Popup.html页面&#xff0c;引用Popup.js脚本&#xff0c;通过脚本向Java RMI client发送消息&#xff0c;Java RMI Client接收消息后转发到Java RMI Server…

Hadoop3:HDFS的客户端工具Big Data Tools(IDEA版本)

1、安装插件 在Plugins里搜索Big Data Tools 安装完成后&#xff0c;重启IDEA 2、配置Windows环境 主要是配置Hadoop环境&#xff0c;否则无法通过插件远程连接HDFS 1、解压hadoop安装包 2、进入hadoop的bin目录 放入图中标红的两个文件 3、配置hadoop环境变量 新建HAD…