title: String
index_img: img/5.svg
tags:
- Java SE
- 字符串
categories:
- Java SE
hide: false
excerpt: String、对象创建、字符串方法
String
String字符串的内容不会发生改变,它的对象在创建后不能被更改。
创建对象
//直接创建(常用)
String str = "Tom"
// new 构造
String str = new String(); //空白字符串
char[] charArry = {'a','b',...};
String str = new String(charArry); //要修改字符串的值,只需要修改字节数组就可以了【字符数组】
byte[] bytes = {99,98,100};
String str = new String(bytes); //要修改字符串的值,只需要修改字节数组就可以了【字节数组】
public class Test {
public static void main(String[] args) {
String s = "hello";
s = "java";
s = "kk";
}
}
Test创建了3个对象,都在字符串常量池,随着赋值,对象s的指向新对象java,最后指向kk。
String对象创建
String str = "abc";
这种形式会在字符串常量池创建
abc对象,如果已经存在了abc对象,就不会创建,而是直接引用。
下方案例创建了1个对象,字符串常量池中的abc
new String = new String("abc");
如果常量池中没有
abc,会在常量池中创建对象,在堆中也创建对象,堆中对象引用常量池中的对象如果常量池有
abc,则在堆中创建对象,堆中对象引用常量池中的对象
下方案例
- 前者创建了2个对象,字符串常量池的
abc、堆中String对象 - 后者创建了1个对象,即
堆中String对象
常用操作
字符串比较
equals(str):两个比较值完全一样equalsIgnoreCase:忽略大小写(英文)
== 和 equals
| 特征 | == |
equals() |
|---|---|---|
| 用途 | 比较两个变量或对象的值是否相等 | 比较两个对象内容是否相等 |
| 适用类型 | 基本类型和用类型 | 主要适用于引用类型 |
| 比较规则 | 对于基本类型,比较它们的值 | 默认情况下,比较对象的引用地址,但可以通过重写equals()方法来改变比较规则 |
| 返回值 | 对于基本类型,如果值相等返回true,否则返回false |
如果对象内容相等返回true,否则返回false |
| 注意事项 | 对于引用类型,==比较的是对象的引用地址,而不是对象的内容 |
在使用equals()方法前,需要确保对象不为null |
注意,String已经重写了
equals,对于String对象比较的是对象的值。
public class Test {
public static void main(String[] args) {
String str1 = "Hello"; //常量池
String str2 = "Hello"; //常量池
String str3 = new String("Hello"); //堆
System.out.println(str1 == str2); //true,地址相同
System.out.println(str1 == str3); //false,地址不同
System.out.println(str1.equals(str2)); //true,值相同
System.out.println(str1.equals(str3)); //true,值相同
}
}
根据索引返回字符
public char charAt(int index);
public class Test {
public static void main(String[] args) {
String str = "Hello,Java! ";
byte num1 = 0;
byte num2 = 0;
byte num3 = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if ('A' <= c && c <= 'Z') { //大写字母
num1++;
} else if ('a' <= c && c <= 'z') { //小写字母
num2++;
} else { //其它符号
num3++;
}
}
System.out.println("大写字母有" + num1 + "个"); //大写字母有2个
System.out.println("小写字母有" + num2 + "个"); //小写字母有7个
System.out.println("其它字符有" + num3 + "个"); //其它字符有3个
}
}
返回指定索引开始到结束的子字符串
substring(start, end)包含左边,不包含右边
public class Test {
public static void main(String[] args) {
String str = "Hello, World!";
String sub1 = str.substring(7); //7到末尾
System.out.println(sub1); // 输出:World!
String sub2 = str.substring(0, 5);
System.out.println(sub2); // 输出:Hello
}
}
返回定字符串在原字符串中第一次出现和最后一次出现的索引位置
public class Test {
public static void main(String[] args) {
String str = "Hello, World!";
int firstIndex = str.indexOf('l');
System.out.println(firstIndex); // 输出:2
int lastIndex = str.lastIndexOf("l");
System.out.println(lastIndex); //输出:10
}
}
大小写转换
public class Test {
public static void main(String[] args) {
String str = "Hello, World!";
String lowerCase = str.toLowerCase();
System.out.println(lowerCase); // 输出:hello, world!
String upperCase = str.toUpperCase();
System.out.println(upperCase); // 输出:HELLO, WORLD!
}
}
去除字符串两端的空白字符
public class Test {
public static void main(String[] args) {
String str = " Hello, World! ";
String trimmedStr = str.trim();
System.out.println(trimmedStr); // 输出Hello, World!
}
}