Java之String类

在这里插入图片描述

作者简介: zoro-1,目前大二,正在学习Java,数据结构等
作者主页: zoro-1的主页
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

Java之String类

  • String的构造
    • String底层
    • String之间的比较
      • 比较内容
      • 比较地址
  • 字符串查找相关方法
    • 代码演示
  • 字符串转化
    • 数值类和字符串转化
    • 字符串大小写转化
    • 字符串转数组
    • 字符串格式化
  • 字符串替换
  • 字符串拆分
  • 字符串截取
  • 字符串的其他操作方法
  • 重点:为什么字符串是不可变的
  • 字符串的修改

String的构造

public static void main(String[] args) {
// 使用常量串构造
String s1 = "hello bit";
System.out.println(s1);
// 直接newString对象
String s2 = new String("hello bit");
System.out.println(s1);
// 使用字符数组进行构造
char[] array = {'h','e','l','l','o','b','i','t'};
String s3 = new String(array);
System.out.println(s1);
}

String底层

String是引用类型,内部并不存储字符串本身,在String类的实现源码中,String类实例变量如下
在这里插入图片描述

public static void main(String[] args) {// s1和s2引用的是不同对象 s1和s3引用的是同一对象String s1 = new String("hello");String s2 = new String("world");String s3 = s1;System.out.println(s1.length());   // 获取字符串长度---输出5System.out.println(s1.isEmpty());  // 如果字符串长度为0,返回true,否则返回false}

在这里插入图片描述

String之间的比较

比较内容

以下是一个例子,比较两个字符串变量的内容是否相等:

str1 = "hello"
str2 = "world"if str1 == str2:print("The strings are equal.")
else:print("The strings are not equal.")

输出结果为:

The strings are not equal.

这是因为str1变量包含的字符串与str2变量包含的字符串不同,因此它们的内容不相等。以下是一个例子,比较两个字符串变量的内容是否相等:

str1 = "hello"
str2 = "world"if str1 == str2:print("The strings are equal.")
else:print("The strings are not equal.")

输出结果为:

The strings are not equal.

这是因为str1变量包含的字符串与str2变量包含的字符串不同,因此它们的内容不相等。以下是一个例子,比较两个字符串变量的内容是否相等:

str1 = "hello"
str2 = "world"if str1 == str2:print("The strings are equal.")
else:print("The strings are not equal.")

输出结果为:

The strings are not equal.

这是因为str1变量包含的字符串与str2变量包含的字符串不同,因此它们的内容不相等。

比较地址

假设有两个String对象,分别为str1和str2,它们的值都为"Hello"。

当我们使用"=="运算符比较这两个字符串时,实际上比较的是它们在内存中的地址。

例如:

String str1 = "Hello";
String str2 = "Hello";if (str1 == str2) {System.out.println("str1和str2的地址相同");
} else {System.out.println("str1和str2的地址不同");
}

输出结果为"str1和str2的地址相同",因为在Java中,如果两个字符串的值相同,则它们会被存储在同一个字符串常量池中,因此它们的地址是相同的。但是,如果我们使用new关键字创建字符串对象,则它们的地址是不同的,例如:

String str1 = new String("Hello");
String str2 = new String("Hello");if (str1 == str2) {System.out.println("str1和str2的地址相同");
} else {System.out.println("str1和str2的地址不同");
}

输出结果为"str1和str2的地址不同",因为每个字符串对象都有自己的地址空间,它们并不指向同一个地址。

字符串查找相关方法

在这里插入图片描述

代码演示

String s = "aaabbbcccaaabbbccc";System.out.println(s.charAt(3)); //'bSystem.out.println(s.indexOf('c')); // 6System.out.println(s.indexOf('c', 10));// 15System.out.println(s.indexOf("bbb")); //3System.out.println(s.indexOf("bbb", 10)); // 12System.out.println(s.lastIndexOf('c'));// 17System.out.println(s.lastIndexOf('c', 10)); // 8System.out.println(s.lastIndexOf("bbb"));  // 12System.out.println(s.lastIndexOf("bbb", 10)); // 3

代码执行结果:
在这里插入图片描述

字符串转化

数值类和字符串转化

public static void main(String[] args) {String s = "aaabbbcccaaabbbccc";System.out.println(s.charAt(3));                             // 'b'System.out.println(s.indexOf('c'));                          // 6System.out.println(s.indexOf('c', 10));                      // 15System.out.println(s.indexOf("bbb"));                        // 3System.out.println(s.indexOf("bbb", 10));                    // 12System.out.println(s.lastIndexOf('c'));                      // 17System.out.println(s.lastIndexOf('c', 10));                  // 8System.out.println(s.lastIndexOf("bbb"));                    // 12System.out.println(s.lastIndexOf("bbb", 10));                // 3public static void main(String[] args) {// 数字转字符串String s1 = String.valueOf(1234);String s2 = String.valueOf(12.34);String s3 = String.valueOf(true);String s4 = String.valueOf(new Student("Hanmeimei", 18));System.out.println(s1);System.out.println(s2);System.out.println(s3);    System.out.println(s4);                   System.out.println("=================================");   // 字符串转数字// 注意:Integer、Double等是Java中的包装类型,这个后面会讲到int data1 = Integer.parseInt("1234");  double data2 = Double.parseDouble("12.34");    System.out.println(data1);    System.out.println(data2); }}

字符串大小写转化

public static void main(String[] args) {    
String s1 = "hello";    
String s2 = "HELLO";    // 小写转大写    
System.out.println(s1.toUpperCase());    // 大写转小写
System.out.println(s2.toLowerCase()); 
}

字符串转数组

public static void main(String[] args) {    
String s = "hello";    // 字符串转数组char[] ch = s.toCharArray();    for (int i = 0; i < ch.length; i++) {      System.out.print(ch[i]);  }    System.out.println();    // 数组转字符串String s2 = new String(ch);   System.out.println(s2); }

字符串格式化

public static void main(String[] args) {    
String s = String.format("%d-%d-%d", 2019, 9,14);    
System.out.println(s); 
}

字符串替换

在这里插入图片描述
代码演示:

public class Demo {public static void main(String[] args) {String str="abca";System.out.println(str.replaceAll("a","b"));System.out.println(str.replaceFirst("a","b"));}
}

代码运行结果:
在这里插入图片描述

字符串拆分

代码演示:

public class Demo {public static void main(String[] args) {String str="aa aa bb";String[] strs=str.split(" ");for(int i=0;i<strs.length;i++){System.out.println(strs[i]);}}
}

运行结果:
在这里插入图片描述

字符串截取

在这里插入图片描述
代码演示:

public class Demo {public static void main(String[] args) {String str="aaaabb";System.out.println(str.substring(5));System.out.println(str.substring(2,5));}
}

代码运行结果:
在这里插入图片描述

字符串的其他操作方法

在这里插入图片描述

public class Demo {public static void main(String[] args) {String str=" aaaabb ";System.out.println(str.trim());}
}

在这里插入图片描述

public class Demo {public static void main(String[] args) {//这两个方法只针对字符串中的字母String str = "hello%$$%@#$%world 哈哈哈 " ;System.out.println(str.toUpperCase());System.out.println(str.toLowerCase());}
}

在这里插入图片描述

重点:为什么字符串是不可变的

在这里插入图片描述

字符串的中的字符实际上存储在value数组中,大多数认为是因为final修饰了value数组,实际上final修饰的数组是说明这个数组不能指向其他引用,但其中的值是可以改变的,fianl修饰的String类说明这个类不能被继承

字符串的修改

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

public static void main(String[] args) {String s = "hello";s += " world";System.out.println(s);  // 输出:hello world}

在这里插入图片描述

可以看待在对String类进行修改时,效率是非常慢的,因此:尽量避免对String的直接需要,如果要修改建议尽量使用StringBuffer或StringBuilder。

今天的介绍到这里就结束了下一篇我会介绍StringBuffer和StringBuilder的区别,,希望大家支持一下在这里插入图片描述

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

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

相关文章

mysql 密码修改

1、使用mysqladmin修改root密码 使用 mysqladmin 命令修改 MySQL 的 root 用户密码格式为 mysqladmin -u用户名 -p旧密码 password 新密码 注意&#xff1a;下图修改密码的命令中 -uroot 和 -proot 是整体&#xff0c;不要写成 -u root -p root&#xff0c;-u 和 root 间可以加…

大模型赛道如何实现华丽的弯道超车【赠书活动|第十期《分布式统一大数据虚拟文件系统 Alluxio原理、技术与实践》】

文章目录 01 具备对海量小文件的频繁数据访问的 I/O 效率02 提高 GPU 利用率&#xff0c;降低成本并提高投资回报率03 支持各种存储系统的原生接口04 支持单云、混合云和多云部署01 通过数据抽象化统一数据孤岛02 通过分布式缓存实现数据本地性03 优化整个工作流的数据共享04 通…

服务器数据恢复-EVA存储多块硬盘磁头和盘片损坏离线的数据恢复案例

服务器数据恢复环境&#xff1a; HP EVA某型号存储&#xff0c;存储中一共有23块磁盘&#xff0c;上层映射给一台windows server服务器上。 服务器故障&检测&分析&#xff1a; 该EVA存储上三块硬盘指示灯显示黄色&#xff0c;此时存储设备还能正常工作。运维更换显示黄…

Linux日志管理-logrotate(crontab定时任务、Ceph日志转储)

文章目录 一、logrotate概述二、logrotate基本用法三、logrotate运行机制logrotate参数 四、logrotate是怎么做到滚动日志时不影响程序正常的日志输出呢&#xff1f;Linux文件操作机制方案一方案二 五、logrotate实战--Ceph日志转储参考 一、logrotate概述 logrotate是一个用于…

【八大经典排序算法】堆排序

【八大经典排序算法】堆排序 一、概述二、思路解读三、代码实现&#xff08;大堆为例&#xff09; 一、概述 堆排序是J.W.J. Williams于1964年提出的。他提出了一种利用堆的数据结构进行排序的算法&#xff0c;并将其称为堆排序。堆排序是基于选择排序的一种改进&#xff0c;通…

IOTE2023物联网展最新快讯|央企入驻,找物联网平台这一家就够了

IOTE 2023第20届国际物联网展深圳站即将于9月20-22日在深圳国际会展中心&#xff08;宝安&#xff09;启幕&#xff01;航天科技控股集团股份有限公司旗下AIRIOT物联网平台亮相【工业物联网展区9B31-1展位】。 AIRIOT物联网平台定位于通用型物联网技术框架产品&#xff0c;以软…

12306 抢票小助手: 完整易用的抢票解决方案 | 开源日报 0917

testerSunshine/12306 Stars: 31.4k License: MIT 12306 购票小助手是一个使用 Python 编写的项目&#xff0c;主要功能包括自动打码、自动登录、准点预售和捡漏、智能候补以及邮件通知等。该项目具有以下核心优势&#xff1a; 支持多个版本的 Python提供验证码本地识别功能可…

Flutter flutter.minSdkVersion的实际文件位置

Flutter 项目的Android相关版本号配置&#xff1a; flutter.minSdkVersion 的版本号配置文件实际路径&#xff1a; …/flutter_sdk/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy Flutter版本号如下&#xff1a; bzbMacBook-Pro ccsmec % flutter --version …

【iOS】push与present Controller的区别

文章目录 前言一、push方法二、pop方法三、present方法四、dismiss方法五、dismiss多级的方法举例动画 前言 iOS推出与退出界面有两种方式——push与present&#xff0c;接下来笔者分别介绍这两种方式 一、push方法 SecondViewController *second [[SecondViewController all…

JMeter基础 —— 使用Badboy录制JMeter脚本!

1、使用Badboy录制JMeter脚本 打开Badboy工具开始进行脚本录制&#xff1a; &#xff08;1&#xff09;当我们打开Badboy工具时&#xff0c;默认就进入录制状态。 如下图&#xff1a; 当然我们也可以点击录制按钮进行切换。 &#xff08;2&#xff09;在地址栏中输入被测地…

机器视觉检测在流水线上的技术应用

机器视觉在流水线上的应用机器视觉系统的主要功能可以简单概括为&#xff1a;定位、识别、测量、缺陷检测等。相对于人工或传统机械方式而言&#xff0c;机器视觉系统具有速度快、精度高、准确性高等一系列优点。随着工业现代化发展&#xff0c;机器视觉已经广泛应用于各大领域…

idea中VM options的设置 (分配内存)

1. 打开Edit Configurations... 2. 找到 VM options 栏目, 设置参数 -Dserver.port8009 -Xmx512M -Xms256M -Xmx: 最大内存 -Xms最小内存