java基础(String、StringBuilder)

String

String概述

String 类在 java.lang 包下,所以使用的时候不需要导包
String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例
也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象
字符串不可变,它们的值在创建后不能被更改

String的构造方法

在这里插入图片描述

1、以“ ”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串常量池中维护

2、 字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在
不存在:创建
存在:不会重新创建,而是直接复用

3、通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
关于String创建对象的面试题

1、下面代码的输出结果是?

String s = "abc";
String s2 = "abc";
String s3 = new String("abc");
sout(s==s2);//true
sout(s==s3);//false
sout(s2==s3);//false

2、下面代码的输出结果是?

public class Test3 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 == s3);//false
}
}

3、常量优化机制

public class Test4 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a" + "b" + "c"; 
System.out.println(s1 == s2);//true
}
}

String的特点

  • Java 程序中所有的双引号字符串,都是 String 类的对象
    (String a=“Hello”)

  • 字符串不可变,它们的值在创建后不能被更改

String的比较

使用 == 做比较
⚫ 基本类型:比较的是数据值是否相同
⚫ 引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
⚫ public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串

String常用的方法

比较字符串的内容,严格区分大小写
public boolean equals(Object anObject) 


比较字符串的内容,忽略大小写
public boolean equalsIgnoreCase(String anotherString) 


返回此字符串的长度
public int length() 


返回指定索引处的 charpublic char charAt(int index) 


将字符串拆分为字符数组后返回
public char[] toCharArray() 


根据开始和结束索引进行截取,得到新的字符串(包含头,不包含尾)
public String substring(int beginIndex, int endIndex) 


从传入的索引处截取,截取到末尾,得到新的字符串
public String substring(int beginIndex) 


使用新值,将字符串中的旧值替换,得到新的字符串
public String replace(CharSequence target, CharSequence replacement) 


根据传入的规则切割字符串,得到字符串数组
注意,. * + | 要是以这些分割,需要加上\\转义,要是有多个分割符,可以用|来连接
public String[] split(String regex) 

StringBuilder

提高字符串的操作效率

StringBuilder的构造方法

StringBuilder sb = new StringBuilder();

StringBuilder sb2 = new StringBuilder("abc");

StringBuilder的成员方法

StringBuilder append(Object obj)   //向缓冲区添加内容

StringBuilder reverse()      // 将缓冲区内容进行反转

toString()  //把StringBuilder转换成String

length()   //返回值StringBuilder的长度

StringBuilder和String的转化

StringBuilder如何转换为String    //调用toString()方法即可返回一个字符串

String如何转换为StringBuilder   // 通过StringBuilder的有参构造方法将字符串传入

为什么说StringBuilder可以提高字符串的操作(+)效率

public class Test {
	public static void main(String[] agrs){
		String S1 = "a";
		String S2 = s1 + "b";
		String S3 = s2 + "c";
		System.out.println(s3)//abc
	}
}

执行过程:

  • 字节码文件Test.class进入方法区

  • mian()方法被Java虚拟机自动调用执行进入栈内存

  • 执行第一行代码:这里使用双引号创建字符串对象,会先检查常量池里面用没有,没有的话会创建,再把 “a” 的地址赋给s1;

  • 执行第二行代码:又有一个常量,去检查常量池中有没有,没有,创建;使用 “+” 号拼接,系统底层会自动的创建一个StringBuilder对象,再调用tringBuilder对象的append()方法完成拼接,因为StringBuilder与String的类型不匹配,没法直接进行复制,所以系统会调用StringBuilder对的tostring() 方法将其转换为一个String对象,最后才会将地址002赋值给s2;

  • 执行第三行代码:又有一个常量 ,又是 “+” 拼接 ,执行流程同执行上一行的一样,就不重复一次了,最后得到s3的地址004

  • 执行最后一行代码,打印结果:abc
    在这里插入图片描述
    意思就是说使用字符串的拼接+时,每次都会通过StringBuilder的append()方法完成的,完成拼接之后,StringBuilder类型还要通过toString()方法转为字符串,这就是为什么用StringBuilder可以提高字符串+的原因

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值