String类学习

本文深入解析Java中字符串的创建、比较、常量池机制及不可变性。探讨了直接赋值与构造方法实例化的区别,以及如何正确使用equals()方法进行字符串比较。分析了字符串常量池的工作原理和intern()方法的作用。

一.创建字符串
·String str=“java”;

如下图:修改str2的不会影响str1的值,只会重新创建一个新的对象让str2指向新的对象
在这里插入图片描述
·String str=new String(“java”);//和方式一比较,虽然都是“java”这个字符串,但地址不同,此方法是重新创建了一个新的对象,拥有新的地址。
在这里插入图片描述
·char[] array=new char[]{‘j’,‘a’,‘v’,‘a’};
String str=new String(array);

二.字符串比较相等
字符串比较相等是比较内容是否相等,用的不是“==”,等号在String字符串比较的是字符串地址是否相同,用的是equals()方法。

String str1="java";
String str2="java";
String str3=new String("java");
System.out.println(str1==str2);//结果是true,
//因为他们指的是同一字符串,所以地址相同
System.out.println(str1==str3);//结果是false
//他们字符串内容虽然相同,但不属于同一对象,所以地址不相同;

System.out.println(str1.equals(str3));//true

**使用equals()方法需要注意!

String str1=new String("hello");
//用str1与"hello"这个字符比较内容是否相同
//方式一
System.out.println(str1.equals("hello"));
//方式二
System.out.println("hello".equals(str1));

第二种方式更加确切,原因是,如果str1是null,那么方式一会出现空字符串异常(java.lang.NullPointerException 异常),因为空的字符串没有equals()方法

三.字符串常量池
在这里插入图片描述
1.str1,str2,str3指向同一个对象的原因是,String类使用了共享模式设计,str1通过直接赋值的模式进行了实例化对象操作,该实例化对象(字符串内容)将会被保存在字符串常量池中,如果后续操作还是采用直接赋值实例化对象,如果字符串内容在常量池中有相同内容,那么直接引用,如果没有,那么开辟新的空间将新的字符串对象保存在常量池中,供下一次使用

2.intern(),已经知道直接赋值,如果字符串内容相同,不会开辟新的空间来存储相同内容字符串,如果采用String构造方法创建一个字符串,不管内容是否相同都会开辟新的空间。此时可以使用intern()方法,作用就是让采用String构造方法创建一个内容在常量池当中存在的字符串加到字符串常量池当中,请看下图来理解。
在这里插入图片描述
**面试题:**请解释String类中两种对象实例化的区别?
1. 直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。
2. 构造方法:会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用

四.字符串的不可变性
1.

String str="hello";
str=str+"world";
str=str+"!";
System.out.println(str);
//结果是:helloworld!

看似字符串内容改变,但只是表象,实际并没有改变!
在这里插入图片描述
2.可以使用以下方法改变内容

String str="hello";
str="H"+str.subString(1);//截取从下标为一开始的所有字符;
//str内容为Hello

String 类中有很多方法:可以使用jdk-Api文档来查找

基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
C++的string是C++标准库中提供的一个用于处理字符串的。它提供了一系列成员函数和操作符重载,使得字符串的操作更加方便和高效。 string的特点包括: 1. 动态内存管理:string会自动管理字符串的内存,无需手动分配和释放内存。 2. 可变性:string对象可以随时修改其内容,包括插入、删除、替换等操作。 3. 字符串操作:string提供了丰富的字符串操作函数,如查找、比较、连接、截取等。 以下是一些常用的string成员函数和操作符重载: 1. 构造函数:可以使用不同的方式创建string对象,如默认构造函数、拷贝构造函数、从C风格字符串构造等。 2. 赋值操作:可以使用赋值运算符=将一个string对象赋值给另一个对象。 3. 连接操作:可以使用+运算符将两个string对象连接起来。 4. 访问字符:可以使用下标运算符[]或at()函数来访问字符串中的单个字符。 5. 获取长度:可以使用length()或size()函数获取字符串的长度。 6. 查找子串:可以使用find()函数在字符串中查找指定的子串。 7. 插入和删除:可以使用insert()函数在指定位置插入字符或子串,使用erase()函数删除指定位置的字符或子串。 8. 截取子串:可以使用substr()函数截取指定位置和长度的子串。 9. 比较字符串:可以使用比较运算符==、!=、<、>等来比较两个字符串的大小。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值