String类详解


# 前言 本文详细介绍了Java中String类的基础知识

一、String类概述

Java专门提供了用来处理字符序列String类。String类再java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用String类。
注:Java把String类定义为final类,因此用户不可以扩展String类,即String类不可以有子类。

二、构造String对象

1.常量对象

(1)string常量是用双引号括起来的字符序列(不包括双引号本身),本身也是对象,例如,“Hello World”,"2021"等。
(2)Java把用户程序中的String常量放入常量池,且因为String常量也是对象,所以他也有自己的引用和实体
注:常量池中的数据在用户程运行期间不再改变
在这里插入图片描述

2.String对象

用String类声明对象并使用对象
例如:

String s = new String("You are the best!");
String t = new String("You are the best!");

上述代码具体是这样的过程:
1.new运算符首先分配内存空间
2.在分配出来的内存空间中放入字符序列
3.计算出该空间的引用
4.将引用赋值给对象s

也就是说,对象s中存放的是引用,而不是真正的字符序列,java是通过引用进一步找到字符序列。
在这里插入图片描述

需要注意的地方:
1.所有new运算符构造的对象都不在常量池中,而是在动态区中,在程序运行期间,它们是允许被改变的
2.每次new运算符构造的对象都是独一无二的,是俩块不同的内存空间,例如上述代码中的s和t,s==t的值为false
3.用户无法输出String对象的引用
如:System.out.println(s); 输出的是 You are the best! 即输出的是实体而不是引用。

代码如下(示例):

Sting类其它常用构造函数

(1)String (char a[]), 用一个字符数组a创建一个对象
例:

char a[] = {'a','b','c','d'};
String s = new String(a);

上述过程相当于:

String s = new String("abcd");

(2)String(cha a[],int startIndex,int count)
例:

char a[] = {'a','b','c','d','e','f'};
String s = new String(a,2,3);

上述过程相当于:

String s = new String("cde");

3.引用String常量

因为String常量是对象,因此可以把String常量的引用赋值给String对象

String s,t;
s="best";
t="best";

上述代码把常量对象"best"的引用分别赋值给s和t,因此表达式表达式s==t的值为true
在这里插入图片描述

注:s,t是可以改变的,如:再进行s=“acm”; 运算,s中的值将发生改变,且s==t的值为false

三、字符串的并置

String可以使用“+”进行并置运算,即首尾相接得到一个新的String对象
注意:
(1)被相加的俩个String对象,只要有一个是变量,那么相加后的String对象,就被存放到动态区中。
(1)如果是俩个常量进行并置运算,得到的仍然是常量,且如果常量池中本来没有这个常量,就将其放入常量池中
代码示例:

String s="abc";
String t="de";
String addtwo1="abc"+"de"; //"abc"+"de"得到常量"abcde"
                           //"abcde"被添加到常量池
                           //"abcde"的引用被赋给addtwo1
String addtwo2=s+t;        //addtwo的引用和实体都在动态区中

在这里插入图片描述

四、String类常用方法

(1)public int length()

功能:获取字符串长度
例如:

String best="I am best!";
		int n1,n2;
		n1=best.length();
		n2="I am best!".length();
        System.out.println(n1); //输出10
        System.out.println(n2); //输出10

注:转义字符 \b \t \n \f \r " ’ \视作一个字符

数组也有一个获取数组长度的方法,和String对象的区别是一个有括号一个没括号
例如:
char[] a= {‘a’,‘v’,‘d’};
int n=a.length; //这个length后面没有括号
System.out.println(n); //n的值为3

(2)public char charAt(int index)

返回对应下标的字符(下表从0到length-1)

(3)public boolean equals(String s)

功能:比较当前对象是否与参数s指定的字符序列相同(大小写不同也算作不相同)
例如:

String best="I am best!";
		String good="I am good!";
		String beeter="I am best!";
		boolean n1,n2,n3,n4;
		n1=best.equals(good);
		n2=best.equals(beeter);
		n3="I am best!".equals(best);
		n4=best.equals("I am best!");
        System.out.println(n1); //输出false
        System.out.println(n2); //输出true
        System.out.println(n3); //输出true
        System.out.println(n4); //输出true

(4)public boolean equalsIgnorecase(String s)

功能:该函数也是比较字符序列是否相同,但比较时忽略大小写
注:除非特意声明忽略大小写,否则涉及到相关问题的函数都不会忽略大小写

(5)public boolean startswithWith(String s)

功能:判断当前对象指定的字符序列的前缀是否是参数s指定的字符序列
例如:

String best="I am best!";
		String I="I";
		boolean n1;
		n1=best.startsWith(I);
		System.out.println(n1); //值为true
		n1=best.startsWith("i");
		System.out.println(n1); //startsWith区分大小写,以为false

(6)public boolean endswithWith(String s)

功能:判断当前对象指定的字符序列的后缀是否是参数s指定的字符序列

(7)public int compareTo(String s)

功能:比较俩个字符串的大小
若当前对象指定的字符序列大于参数s指定的字符序列,返回正值,相等返回0,小于返回负值。
字符序列比较大小规则:比较String大小

(8)public boolean contains(String s)

功能:判断当前对象的字符序列是否包含参数s的字符序列(区分大小写)

(9)public int indexOf(String s)

功能:在当前字符序列中从索引0开始寻找参数s字符序列首次出现的位置
例如:

String best="I am best!";
		String s="am";
		int n;
		n=best.indexOf(s);
		System.out.println(n);  //n的值为2

注:
(1)indexOf(String s,int x)从指定索引x开始寻找s
(2)字符序列中的转义字符 \b \t \n \f \r " ’ \视作一个字符

(10)public int lastIndexOf(String s)

功能:在当前字符序列中从索引0开始寻找参数s字符序列最后出现的位置

(11)public String substring(int startpoint,int end)

功能:获得一个新的String对像——复制当前String对象的字符序列从startpoint开始到end-1位置上的字符序列。若不写end参数,则复制到最后位置

(12)public String trim()

功能:得到一个新的String对象——除掉空格

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值