一、String的常用方法
1、获取字符串长度
String s = "1234test";
System.out.println(s.length());
====执行结果====
8
2、判断两个字符串是否相同
String s = "1234test";
System.out.println(s.equals("123"));
====执行结果====
false
3、获取当前字符串的哈希值
String s = "1234test";
System.out.println(s.hashCode());
====执行结果====
-1859429420
4、去除字符串前后空格
System.out.println(" 1234 test ".trim());
====执行结果====
1234 test
5、获取指定索引的字符
String s = "1234test";
System.out.println(s.charAt(6));
====执行结果====
s
6、获取字符序列中该字符第一次出现的索引
String s = "1234test";
System.out.println(s.indexOf("2"));
====执行结果====
1
7、获取字符序列中该字符最后一次出现的索引
String s = "1234test";
System.out.println(s.lastIndexOf("2"));
====执行结果====
1
8、根据正则表达式切割
String s = "1234test";
String[] split = s.split("3");
System.out.println(Arrays.toString(split));
====执行结果====
[12, 4test]
9、获取指定索引后的字符串内容,或者从那个索引到那个索引之间内容
String substring = s.substring(2);
System.out.println(substring);
====执行结果====
34test
10、判断字符串是否匹配给定的正则表达式
String s = "1234test";
System.out.println(s.matches("^d"));
====执行结果====
false
11、判断当前字符串是否包含指定字符串
String s = "1234test";
System.out.println(s.contains("123"));
====执行结果====
true
12、获取字符串所有字符阿斯克码表数组
String s = "1234test";
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(bytes));
====执行结果====
[49, 50, 51, 52, 116, 101, 115, 116]
13、将字符串转换为字符数组
String s = "1234test";
char[] chars = s.toCharArray();
for (char aChar : chars) {
System.out.print(aChar + " ");
}
====执行结果====
1 2 3 4 t e s t
14、将字符串转成大写字母
String s = "1234Test";
String toUpperCase = s.toUpperCase();
System.out.println(toUpperCase);
====执行结果====
1234TEST
15、将字符串转成小写字母
String s = "1234Test";
String toLowerCase = s.toLowerCase();
System.out.println(toLowerCase);
====执行结果====
1234test
16、查询当前对象是否存在于字符串常量池中
String s = "1234test";
/**
* 如果存在直接返回该常量池地址;如果不在,则将该字符串加入常量池,并返回该对象常量池地址
* 由于String重写了Object类的toString方法,所以执行结果为对象本身
*/
System.out.println(s.intern());
====执行结果====
1234test
二、常见面试题
1、String 属于基础的数据类型吗?
String不属于基础类型,String属于对象。
基础类型有 8 种:byte、short、int、long、float、double、boolean、char
2、Java中操作字符串都有哪些类?他们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。
====String和StringBuffer、StringBuilder的区别====
String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象。
StringBuffer、StringBuilder声明的是可变对象,可以在原有对象的基础上进行操作,因此在经常改变字符串内容的情况下选用StringBuffer或者StringBuilder。
====StringBuffer和StringBuilder的区别====
StringBuffer是线程安全的,而StringBuilder是非线程安全的,但StringBuilder的性能却高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer。
3、如何将字符串反转?
//使用StringBuilder的reverse()方法
String s = "1234test";
StringBuilder stringBuilder = new StringBuilder(s);
String reverse = stringBuilder.reverse().toString();
System.out.println(reverse);
====执行结果====
tset4321
//使用stringBuffer的reverse()方法
String s = "1234test";
StringBuffer stringBuffer = new StringBuffer(s);
String reverse = stringBuffer.reverse().toString();
System.out.println(reverse);
====执行结果====
tset4321
4、"=="和"equals()方法"的区别是什么?
====性质不同====
"=="是一个运算符,用于比较两个对象的值是否相等。对于基本数据类型,它比较的是值本身;对于引用数据类型,它比较的是两个引用是否指向同一个对象,即它们的内存地址是否相同。
"equals()方法"是Object类中定义的一个方法,用于比较两个对象的“内容”是否相等。这个方法可以被子类重写以定义自己的比较逻辑。例如,String类的equals方法比较的是字符串的内容是否相同。
====比较的对象不同====
"=="比较的是值或内存地址。
"equals()方法"比较的是对象的内容。
====运行速度不同====
"=="通常比调用equals()方法快,因为它只是简单地比较引用,不需要执行任何额外的逻辑或方法调用。
"equals()方法"可能需要执行额外的逻辑来判断对象的内容是否相等,这取决于该方法是否被子类重写,因此它的运行速度通常较慢。
5、判断两个字符串是否相等
使用
String 对象名称 = "内容";
方式创建String对象,该对象会直接进入常量池,常量池内容不会重复,多次创建相同内容只会指向同一常量池地址。
String sTest = "1234test";
String sTemp = "1234test";
System.out.println(sTemp == sTest);
System.out.println(sTemp.equals(sTest));
====执行结果====
true
true
使用
String 对象名称 = new String("内容");
方式创建String对象,将会创建两个对象,一个为堆内存对象,另一个为常量池对象,堆内存对象是常量池对象的一个拷贝副本,但是当前创建的对象指向的为堆内存。
String sTest = new String("1234test");
String sTemp = "1234test";
System.out.println(sTemp == sTest);
System.out.println(sTemp.equals(sTest));
====执行结果====
false
true
常量进行拼接会直接生成进入常量池的常量
String sTest = "1234" + "test";
String sTemp = "1234test";
System.out.println(sTemp == sTest);
System.out.println(sTemp.equals(sTest));
====执行结果====
true
true
因为String为不可变对象,对象进行拼接过程中会转换为StringBuilder或者StringBuffer对象进行拼接操作,然后通过toString()方法转换为String对象赋值给拼接后的对象。拼接后的对象指向的为堆内存中的对象。
String sTest = "1234";
String sTemp = "1234test";
String result = sTest + "test";
System.out.println(sTemp == result);
System.out.println(sTemp.equals(result));
====执行结果====
false
true
通过new创建字符串对象并立即调用
.intern()
方法进入常量池,因此创建的对象指向的是常量池对象。
String sTest = new String("1234test").intern();
String sTemp = "1234test";
System.out.println(sTemp == sTest);
System.out.println(sTemp.equals(sTest));
====执行结果====
true
true
标签:1234test,String,对象,System,内容,println,相关,out
From: https://blog.csdn.net/qq_33063699/article/details/139860832