String相关内容

一、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
  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值