String类

本文详细介绍了Java中String类的常用操作,包括字符串构造、对象比较(equalsvscompareTo)、查找、转化(数值、大小写、数组和格式化),以及StringBuilder的使用建议,强调了字符串不可变性和性能优化的重要性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

概述

在C语言中已经涉及到字符串,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面向对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。

在开发和校招笔试中,字符串也是常客,比如:
字符串转整形数字
字符串相加
而且在面试中也频繁被问到(String、StringBuff和StringBulider之间的区别等)。

常用方法

1.字符串构造

在这里插入图片描述

String是引用类型,内部并不存储字符串本身,在String类的实现源码中,String类实例变量如下:

在这里插入图片描述

2.String对象的比较

- 比较是否引用同一个对象

注意:对于内置类型,比较的是变量中的值;对于引用类型比较的是引用中的地址。

public static void main(String[] args) {
int a = 10;
    int b = 20;
    int c = 10;
 
    // 对于基本类型变量,==比较两个变量中存储的值是否相同
    System.out.println(a == b);    // false
    System.out.println(a == c);    // true
 
    // 对于引用类型变量,==比较两个引用变量引用的是否为同一个对象
    String s1 = new String("hello");
    String s2 = new String("hello");
    String s3 = new String("world");
    String s4 = s1;
    System.out.println(s1 == s2);   // false
    System.out.println(s2 == s3);   // false
    System.out.println(s1 == s4);   // true
}

- boolean equals(Object anObject) 方法:按照字典序比较

字典序:字符大小的顺序
String类重写了父类Object中equals方法,Object中equals默认按照==比较,String重写equals方法,按规则进行比较

public static void main(String[] args) {
    String s1 = new String("hello");
    String s2 = new String("hello");
    String s3 = new String("Hello");
 
    // s1、s2、s3引用的是三个不同对象,因此==比较结果全部为false
    System.out.println(s1 == s2);       // false
    System.out.println(s1 == s3);       // false
 
    // equals比较:String对象中的逐个字符
    // 虽然s1与s2引用的不是同一个对象,但是两个对象中放置的内容相同,因此输出true
    // s1与s3引用的不是同一个对象,而且两个对象中内容也不同,因此输出false
    System.out.println(s1.equals(s2));  // true
    System.out.println(s1.equals(s3));  // false
}

- int compareTo(String s) 方法: 按照字典序进行比较

与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:

  1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
  2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
public static void main(String[] args) {
    String s1 = new String("abc");
    String s2 = new String("ac");
    String s3 = new String("abc");
    String s4 = new String("abcdef");
    System.out.println(s1.compareTo(s2));   // 不同输出字符差值-1
    System.out.println(s1.compareTo(s3));   // 相同输出 0
    System.out.println(s1.compareTo(s4));   // 前k个字符完全相同,输出长度差值 -3
}

- int compareToIgnoreCase(String str) 方法

与compareTo方式相同,但是忽略大小写比较

3.字符串查找

字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法:
在这里插入图片描述

4. 转化

- 数值和字符串转化

public static void main(String[] args) {
    // 数字转字符串
    String s1 = String.valueOf(1234);
    String s2 = String.valueOf(12.34);
    String s3 = String.valueOf(true);
    String s4 = String.valueOf(new Student("Hanmeimei", 18));
    System.out.println(s1);
    System.out.println(s2);
    System.out.println(s3);   
    System.out.println(s4);

- 大小写转换

public static void main(String[] args) {   
  String s1 = "hello";   
  String s2 = "HELLO";    
    // 小写转大写   
  System.out.println(s1.toUpperCase());   
    // 大写转小写   
  System.out.println(s2.toLowerCase()); }

- 字符串转数组

public static void main(String[] args) {    
 String s = "hello";    // 字符串转数组    
 char[] ch = s.toCharArray();    
 for (int i = 0; i < ch.length; i++) {        
 System.out.print(ch[i]);   
 }    
 System.out.println();    // 数组转字符串    
 String s2 = new String(ch);    
 System.out.println(s2); 
 }

- 格式化

public static void main(String[] args) {    
  String s = String.format("%d-%d-%d", 2019, 9,14);    
  System.out.println(s); 
 }

5.字符串替换

在这里插入图片描述

6.字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
可用方法如下:
在这里插入图片描述

7.字符串截取

从一个完整的字符串之中截取出部分内容。可用方法如下:
在这里插入图片描述

注意事项:

  1. 索引从0开始
  2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

8.其他操作方法

在这里插入图片描述

9.字符串的不可变性

String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改,是因为:
在这里插入图片描述

String类在设计时就是不可改变的

String类被final修饰,表明该类不能被继承
value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

【纠正】网上有些人说:字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。
这种说法是错误的,不是因为String类自身,或者其内部value被final修饰而不能被修改。

StringBuilder的介绍

在对String类进行修改时,效率是非常慢的,因此:尽量避免对String的直接需要,如果要修改建议尽量使用StringBuffer或者StringBuilder。

在这里插入图片描述

更多可参阅 StringBuilder在线文档

  • 46
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值