尚硅谷Java笔记Day30
###### String
String是不可变性
final,不可继承
本质上是char型数组
```java
public class StringTest {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abcd";
System.out.println(s2);
String s3 = s2.replace("a", "m");
System.out.println(s2);
System.out.println(s3);
s2 += "我是猫"; //+拼接的赋值操作
System.out.println(s2);
}
}
C:\Users\Administrator\.jdks\openjdk-19.0.2\bin\java.exe "-javaagent:D:\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=10102:D:\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\Java work\workspace_idea1\out\production\day01" com.atguigu.java.StringTest
abcd
abcd
mbcd
abcd我是猫
Process finished with exit code 0
```
String s1=new String("abc")
造了两个对象,一个是堆空间的new的对象,另一个是char型数组
String s2=new String("abc")
**堆**空间地址值不同,s1,s2不同
s1所在的位置叫做**栈**
构造器构造中的形参String类型,其new的对象地址值直接指向**方法区** **字符串常量池** 中的char型数组,本质上假如内容相同的话是,".equals"的结果是true.
只要存在变量名的,相当于new了一个对象,存在于堆空间中;
常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
只要其中有一个是变量,结果就在堆中
如果拼接的结果调用intern()方法,返回值就在常量池中
```java
import org.junit.Test;
/**
* @author ulkagg
* @create 2023-02-1919:10
*/public class StringTest2 {
@Test
public void Test() {
String s1 = "abc";
String s2 = "def";
String s3 = "abc" + "def";
String s4 = s1 + "def";
String s5 = s1 + s2;
System.out.println(s3==s4);
}
}
```
***引用数据类型传递地址值,基本数据类型传递数据***
###### String常用方法 p19
int length():返回字符串的长度: return value.length
char charAt(int index): 返回某索引处的字符return value[index]
boolean isEmpty():判断是否是空字符串:return value.length == 0
String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写
String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写
String trim():返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object obj):比较字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大
小写
String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
int compareTo(String anotherString):比较两个字符串的大小
String substring(int beginIndex):返回一个新的字符串,它是此字符串的从
beginIndex开始截取到最后的一个子字符串。
String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字
符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
