String类基本使用
文章目录
- 1. String类的理解和创建对象
- 2. 创建String对象的两种方式
- 3. 两种创建String对象的区别
- 4. 测试
- 5. 字符串的特性
- 6. String 类的常见方法
1. String类的理解和创建对象
- String 对象用于保存字符串,也就是一组字符序列
- 字符串常量对象是用双引号括起的字符序列。例如:“你好”、“12.97”、"boy"等
- 字符串的字符使用Unicode字符编码
- String类较常用构造器:一个字符(不区分字母还是汉字)占两个字节
String s1 = new String();
String s2 = new String(String original);
String s3 = new String(char[] a);
String s4 = new String(char[] a, intstartIndex, intcount);
String s5 = new String(byte[] b);

public static void main(String[] args) {//1. String 对象用于保存字符串,也就是一组字符序列//2. "jack" 字符串常量, 双引号括起的字符序列//3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节//4. String 类有很多构造器,构造器的重载// 常用的有 String s1 = new String(); ////String s2 = new String(String original);//String s3 = new String(char[] a);//String s4 = new String(char[] a,int startIndex,int count)//String s5 = new String(byte[] b)//5. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输】// 接口 Comparable [String 对象可以比较大小]//6. String 是final 类,不能被其他的类继承//7. String 有属性 private final char value[]; 用于存放字符串内容//8. 一定要注意:value 是一个final类型, 不可以修改:即value不能指向// 新的地址,但是单个字符内容是可以变化String name = "jack";name = "tom";final char[] value = {'a','b','c'};char[] v2 = {'t','o','m'};value[0] = 'H';//value = v2; 不可以修改 value地址
}
2. 创建String对象的两种方式
- 方式1:直接赋值 String s = “兮动人”;
- 方式2:调用构造器 String s = new String(“xdr”);
3. 两种创建String对象的区别
- 方式一:直接赋值
String s = "xdr"; - 方式二:调用构造器
String s2 = new String("xdr”):
- 方式一:先从常量池查看是否有“xdr”数据空间,如果有,直接指向;如果
没有则重新创建,然后指向。s最终指向的是常量池的空间地址 - 方式二:先在堆中创建空间,里面维护了value属性,指向常量池的xdr空间
如果常量池没有”xdr”,重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址 - 画出两种方式的内存分布图

4. 测试
- 测试1
String a = "abc";
String b = "abc";
System.out.println(a.equals(b)); // T
System.out.println(a == b); // T
- 测试2
String a = new String("abc");
String b = new String("abc");
System.out.println(a.equals(b)); // T
System.out.println(a == b); // F
- 测试3
String a="xdr"; // a指向常量池的 "xdr"
String b=new String("xdr"); // b指向堆中对象
System.out.println(a.equals(b)); // T
System.out.println(a==b); // F
System.out.println(a==b.intern()); // T
System.out.println(b==b.intern()); // F
-
当调用intern方法时,如果池已经包含一个等于此String对象的字符串(用
equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用 -
b.intern(方法最终返回的是常量池的地址(对象) -
测试4
public class StringExercise04 {public static void main(String[] args) {String s1 = "xdr630"; // 指向常量池 xdr630String s2 = "java"; // 指向常量池 javaString s3 = new String("java"); // 指向堆栈中的对象String s4 = "java"; // 指向常量池 javaSystem.out.println(s1 == s2); // falseSystem.out.println(s2 == s3); // falseSystem.out.println(s2.equals(s3)); // trueSystem.out.println(s2 == s4); // true}
}
- 测试5
public class StringExercise05 {public static void main(String[] args) {Person p1 = new Person();p1.name = "xdr630";Person p2 = new Person();p2.name = "xdr630";System.out.println(p1.name.equals(p2.name)); // 比较内容:trueSystem.out.println(p1.name == p2.name); // trueSystem.out.println(p1.name == "xdr630"); // trueString s1 = new String("xdr");String s2 = new String("xdr");System.out.println(s1 == s2); // false}}
5. 字符串的特性
- String是一个
final类,代表不可变的字符序列 - 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的
6. String 类的常见方法
- String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因
此java设计者还提供了StringBuilder和StringBuffer来增强String的功能
并提高效率。
String类的常见方法1
equals//区分大小写,判断内容是否相等
equalslgnoreCase//忽略大小写的判断内容是否相等
length//获取字符的个数,字符串的长度
indexOf//获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
lastlndexOf//获取字符在字符串中最后1次出现的索引,索引从o开始,如找不到,返回-1
substring//截取指定范围的子串
trim//去前后空格
charAt:获取某索引l处的字符,注意不能使用Str[index]这种方式
public class StringMethod01 {public static void main(String[] args) {//1. equals 前面已经讲过了. 比较内容是否相同,区分大小写String str1 = "hello";String str2 = "Hello";System.out.println(str1.equals(str2));//// 2.equalsIgnoreCase 忽略大小写的判断内容是否相等String username = "johN";if ("john".equalsIgnoreCase(username)) {System.out.println("Success!");} else {System.out.println("Failure!");}// 3.length 获取字符的个数,字符串的长度System.out.println("兮动人".length());// 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1String s1 = "wer@terwe@g";int index = s1.indexOf('@');System.out.println(index);// 3System.out.println("weIndex=" + s1.indexOf("we"));//0// 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1s1 = "wer@terwe@g@";index = s1.lastIndexOf('@');System.out.println(index);//11System.out.println("ter的位置=" + s1.lastIndexOf("ter"));//4// 6.substring 截取指定范围的子串String name = "hello,张三";//下面name.substring(6) 从索引6开始截取后面所有的内容System.out.println(name.substring(6));//截取后面的字符//name.substring(0,5)表示从索引0开始截取,截取到索引 5-1=4位置System.out.println(name.substring(2,5));//llo}
}

String类的常见方法2
toUpperCase
toLowerCase
concat
replace替换字符串中的字符
split分割字符串,对于某些分割字符,我们需要转义比如|\等
案例:Stringpoem=“锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦”;和文
件路径.
compareTo//比较两个字符串的大小
toCharArray//转换成字符数组
format//格式字符串,%s字符串%c字符%d整型%.2f浮点型
- 案例,将一个人的信息格式化输出
public class StringMethod02 {public static void main(String[] args) {// 1.toUpperCase转换成大写String s = "heLLo";System.out.println(s.toUpperCase());//HELLO// 2.toLowerCaseSystem.out.println(s.toLowerCase());//hello// 3.concat拼接字符串String s1 = "宝玉";s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together");System.out.println(s1);//宝玉林黛玉薛宝钗together// 4.replace 替换字符串中的字符s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";//在s1中,将 所有的 林黛玉 替换成薛宝钗// 解读: s1.replace() 方法执行后,返回的结果才是替换过的.// 注意对 s1没有任何影响String s11 = s1.replace("宝玉", "jack");System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉System.out.println(s11);//jack and 林黛玉 林黛玉 林黛玉// 5.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";//解读:// 1. 以 , 为标准对 poem 进行分割 , 返回一个数组// 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \String[] split = poem.split(",");poem = "E:\\aaa\\bbb";split = poem.split("\\\\");System.out.println("==分割后内容===");for (int i = 0; i < split.length; i++) {System.out.println(split[i]);}// 6.toCharArray 转换成字符数组s = "happy";char[] chs = s.toCharArray();for (int i = 0; i < chs.length; i++) {System.out.println(chs[i]);}// 7.compareTo 比较两个字符串的大小,如果前者大,// 则返回正数,后者大,则返回负数,如果相等,返回0// 解读// (1) 如果长度相同,并且每个字符也相同,就返回 0// (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小// 就返回 if (c1 != c2) {// return c1 - c2;// }// (3) 如果前面的部分都相同,就返回 str1.len - str2.lenString a = "jcck";// len = 3String b = "jack";// len = 4System.out.println(a.compareTo(b)); // 返回值是 'c' - 'a' = 2的值// 8.format 格式字符串/* 占位符有:* %s 字符串 %c 字符 %d 整型 %.2f 浮点型**/String name = "xdr630";int age = 27;double score = 96.857;char gender = '男';//将所有的信息都拼接在一个字符串.String info ="我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我!";System.out.println(info);//1. %s , %d , %.2f %c 称为占位符//2. 这些占位符由后面变量来替换//3. %s 表示后面由 字符串来替换//4. %d 是整数来替换//5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理//6. %c 使用char 类型来替换String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";String info2 = String.format(formatStr, name, age, score, gender);System.out.println("info2=" + info2);}
}

相关文章:
String类基本使用
文章目录 1. String类的理解和创建对象2. 创建String对象的两种方式3. 两种创建String对象的区别4. 测试5. 字符串的特性6. String 类的常见方法 1. String类的理解和创建对象 String 对象用于保存字符串,也就是一组字符序列字符串常量对象是用双引号括起的字符序列…...
华为机试—火车进站
题目 火车站一共有 n 辆火车需要入站,每辆火车有一个编号,编号为 1 到 n。 同时,也有火车需要出站,由于火车站进出共享一个轨道,所以后入站的火车需要先出站。换句话说,对于某一辆火车,只有在它…...
Python数组(array)学习之旅:数据结构的奇妙冒险
Python数组学习之旅:数据结构的奇妙冒险 第一天:初识数组的惊喜 阳光透过窗帘缝隙洒进李明的房间,照亮了他桌上摊开的笔记本和笔记本电脑。作为一名刚刚转行的金融分析师,李明已经坚持学习Python编程一个月了。他的眼睛因为昨晚熬夜编程而微微发红,但脸上却挂着期待的微…...
spark-core编程2
Key-Value类型: foldByKey 当分区内计算规则和分区间计算规则相同时,aggregateByKey 就可以简化为 foldByKey combineByKey 最通用的对 key-value 型 rdd 进行聚集操作的聚集函数(aggregation function)。类似于aggregate()&…...
AIDD-人工智能药物设计-大语言模型在医学领域的革命性应用
Nat. Rev. Bioeng. | 大语言模型在医学领域的革命性应用 大型语言模型(LLMs),如 ChatGPT,因其对人类语言的理解与生成能力而备受关注。尽管越来越多研究探索其在临床诊断辅助、医学教育等任务中的应用,但关于其发展、…...
Windows 系统中安装 Git 并配置 GitHub 账户
由于电脑重装系统,重新配置了git. 以下是在 Windows 系统中安装 Git 并配置 GitHub 账户的详细步骤: 1. 安装 Git 访问 Git 官网下载页面下载 Windows 版本的 Git 安装程序运行安装程序,使用默认选项即可 2. 配置 Git 用户信息 打开命令…...
QQ风格客服聊天窗口
QQ风格客服聊天窗口 展示引入方式 展示 引入方式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…...
fastadmin后端添加页面,自主控制弹出框关闭,关闭父页面弹框
Form.api.bindevent($(“form[roleform]”), (data, ret) > { 重写绑定事件,返回false即可 注意:只有返回code1才能拦截,其他值不进行拦截 add: function () {//获取当前search里面的type值var type location.search.split(type)[1];Form.api.bindevent($("form[role…...
leetcode572 另一棵树的子树
1.与100、101解法相同 递归: class Solution { private:bool compare(TreeNode* p, TreeNode* q){if(!p && !q) return true;else if(!p || !q) return false;else if(p->val ! q->val) return false;bool leftside compare(p->left, q->lef…...
MCU刷写——Hex文件格式详解及Python代码
工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊Hex这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…...
ubnetu 服务器版本常用端口和开放的端口对应的应用
1. 使用 netstat 查看端口与进程 netstat 是查看网络连接和监听端口的常用工具。通过以下命令可以列出所有开放的TCP/UDP端口及其关联的进程: sudo netstat -tulnp参数解析: -t:显示TCP端口。 -u:显示UDP端口。 -l࿱…...
汇舟问卷:国外问卷调查技巧有哪些,具体该怎么操作
大家好,我是汇舟问卷,今天咱们就聊聊国外问卷答题的技巧和操作步骤,保你听完立马能上手! 一、答题前先创建人设 1,进题时先瞄两眼问题,快速判断问卷主题,再定人设。比如遇到奶粉问卷ÿ…...
DeepSeek的神经元革命:穿透搜索引擎算法的下一代内容基建
DeepSeek的神经元革命:穿透搜索引擎算法的下一代内容基建 ——从语义网络到价值共识的范式重构 一、搜索引擎的“内容饥渴症”与AI的基建使命 2024年Q1数据显示,百度索引网页总数突破3500亿,但用户点击集中在0.78%的高价值页面。这种“数据…...
C++标识符:检查是否和保留字冲突
1. 基础知识 最基本的要求: 字母、数字、下划线组成, 并且不能是数字开头。 禁忌1: C 关键字不能用做标识符。 它们是: alignas alignof asm auto bool break case catch char char16_t char32_t class const constexpr const_…...
《Python星球日记》第27天:Seaborn 可视化
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、Seabor…...
自动驾驶技术-相机_IMU时空标定
自动驾驶技术-相机_IMU时空标定 时间延迟 时间延迟 参考链接1、2 相机主要分为全局和卷帘快门相机,从触发到成像的过程包括:复位时间、AE()曝光时间、读出时间 全局快门如下图所示 卷帘快门如下图所示 相机录制视频时,为了保持固定频率&am…...
第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 部分题解
题面链接Htlang/2025lqb_python_b 个人觉得今年这套题整体比往年要简单许多,但是G题想简单了出大问题,预估50101015120860,道阻且长,再接再厉 A: 攻击次数 答案:103?181?题目没说明白每回合是…...
HTTP:三.HTTP连接
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。它是互联网上最常用的协议,用于在客户端和服务器之间传输数据。HTTP协议通常用于从Web服务器传输网页和文件到客户端浏览器,并支持其他用途,如传输API数据和传输文件。 HTTP连接是指客户端向服务…...
Oracle 复制表结构(含索引、主键)操作指南
Oracle 复制表结构(含索引、主键)操作指南 1. 复制基础表结构 -- 创建空表结构(不复制数据) CREATE TABLE new_table AS SELECT * FROM old_table WHERE 10;2. 复制主键约束 -- 查询原表主键信息 SELECT constraint_name, co…...
”插入排序“”选择排序“
文章目录 插入排序1. 直接插入排序(O(n^2))举例1:举例2:直插排序的"代码"直插排序的“时间复杂度” 2. 希尔排序(O(n^1.3))方法一方法二(时间复杂度更优) 选择排序堆排序直接选择排序 我们学过冒泡排序,堆排序等等。(回…...
烟花爆竹储存作业安全要求
烟花爆竹储存作业证是从事相关作业的法定凭证,旨在确保操作人员具备专业知识和安全技能,防止因违规操作引发火灾、爆炸等事故。根据《烟花爆竹安全管理条例》及相关法规,未取得作业证的人员不得从事烟花爆竹储存、搬运、管理等作业。 仓库选址…...
Python深度学习基础——卷积神经网络(CNN)(PyTorch)
CNN原理 从DNN到CNN 卷积层与汇聚 深度神经网络DNN中,相邻层的所有神经元之间都有连接,这叫全连接;卷积神经网络 CNN 中,新增了卷积层(Convolution)与汇聚(Pooling)。DNN 的全连接…...
Python(11)Python判断语句全面解析:从基础到高级模式匹配
目录 一、条件逻辑的工程价值1.1 真实项目中的逻辑判断1.2 判断语句类型矩阵 二、基础判断深度解析2.1 多条件联合判断2.2 类型安全判断 三、模式匹配进阶应用3.1 结构化数据匹配3.2 对象模式匹配 四、判断语句优化策略4.1 逻辑表达式优化4.2 性能对比测试 五、典型应用场景实战…...
MTK7628基于原厂的mtk-openwrt-sdk-20160324-8f8e4f1e.tar.bz2 源代码包,配置成单网口模式的方法
一、配置. 在SDK工程下,运行make kernel_menuconfig,如下图所示: Ralink Module --->选上“One Port Only”,如下图所示: 如果P0网口实现WAN口,就配置成W/LLLL,否则就配置成LLLL/W. 二、修改网口的原代…...
艾伦·图灵:计算机科学与人工智能之父
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 艾伦图灵:计算机科学与人工智能之父 一、天才的诞生与早期生涯 1912年6月…...
策略模式实现 Bean 注入时怎么知道具体注入的是哪个 Bean?
Autowire Resource 的区别 1.来源不同:其中 Autowire 是 Spring2.5 定义的注解,而 Resource 是 Java 定义的注解 2.依赖查找的顺序不同: 依赖注入的功能,是通过先在 Spring IoC 容器中查找对象,再将对象注入引入到当…...
React九案例中
代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择,地图找房页面的复用,在 components 目录中创建组件 NavHeader,把之前城市列表写过的样式复制到 NavHeader.scss 下,在该组件中封装 antd-mobile 组件库中的 N…...
第一期:[特殊字符] 深入理解MyBatis[特殊字符]从JDBC到MyBatis——持久层开发的转折点[特殊字符]
前言 🌟 在软件开发的过程中,持久层(或数据访问层)是与数据库进行交互的关键部分。早期,开发者通常使用 JDBC(Java Database Connectivity)来实现与数据库的连接与操作。虽然 JDBC 在一定程度上…...
Adobe Photoshop 2025 Mac中文 Ps图像编辑
Adobe Photoshop 2025 Mac中文 Ps图像编辑 一、介绍 Adobe Photoshop 2025 Mac版集成了多种强大的图像编辑、处理和创作功能。①强化了Adobe Sensei AI的应用,通过智能抠图、自动修复、图像生成等功能,用户能够快速而精确地编辑图像。②3D编辑和动画功…...
用纯Qt实现GB28181协议/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲
一、前言 在技术的长河中探索,有些目标一旦确立,便如同璀璨星辰,指引着我们不断前行。早在2014年,我心中就种下了用纯Qt实现GB28181协议的种子,如今回首,一晃十年已逝,好在整体框架和逻辑终于打…...
