JAVA中的String类

本文详细介绍了Java中String类的使用,包括创建字符串的三种方式、字符串的比较、字符串常量池的概念及其影响,以及字符串的不可变性。此外,还探讨了字符数组与字符串的转换,并提到了StringBuffer和StringBuilder在字符串内容修改时的角色。内容涵盖了字符串的基础操作和内存管理策略,对于理解Java字符串处理至关重要。
摘要由CSDN通过智能技术生成

JAVA中的String类

1、创建字符串
方式一:
String str=“Hello”;
方式二:
String str2=new String(“Hello”);
方式三:
char[] array={‘a’};
String str3=new String(array);

注意:String为引用类型
引用类似于C语言中的指针,只是在栈上开辟了一小块内存空间保存一个地址,但其不能进行各种数字运算,可以将其看作一个标签,一个对象上可以贴一个,若没有,则该对象会被JVM当作垃圾对象回收掉
Java数组中,String以及自定义的类都是引用类型。

内存布局如图:
在这里插入图片描述
若修改上图中的str1,并不算真正修改字符串,而是让str指向了一个新的String对象。

2、字符串比较相等
两个int 变量,判断其相等可用==完成,如下:

int x = 10 ;
int y = 10 ;
System.out.println(x == y); 
// 执行结果
true

但在使用String方式时存在两种差异:
1、String使用==比较并不是在比较字符串的内容,而是比较两个引用是否指向一个对象。
2、Java中相比较字符串的内容必须用String类提供的equals.如下:

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));
// System.out.println(str2.equals(str1)); // 或者这样写也行
// 执行结果
true

3、字符串常量池
一种是直接赋值
String str1 = “hello” ;
String类的设计使用了共享设计模式,在JVM底层实际上会自动维护一个对象池(字符串常量池),可以直接引用之前的实例化对象;
另一种是采用构造方法new一个新的String,如下:
String str=new String(“hello”);
缺点是多次开辟可能会成为垃圾空间,比较浪费空间。
优点是可以使用 String 的 intern 方法来手动把 String 对象加入到字符串常量池中,方便下次使用。如下:

String str1 = new String("hello") ; 
String str2 = "hello" ; 
System.out.println(str1 == str2); 
// 执行结果
false
    
String str1 = new String("hello").intern() ; 
String str2 = "hello" ; 
System.out.println(str1 == str2); 
// 执行结果
true

4、字符串内容不可变
那么如果实在需要修改字符串, 例如, 现有字符串 str = “Hello” , 想改成 str = “hello” , 该怎么办?
常见办法: 借助原字符串, 创建新的字符串

String str = "Hello";
str = "h" + str.substring(1);
System.out.println(str);
// 执行结果
hello

5、字符字节与字符串
字符串内部包含一个字符数组,String 可以和 char[] 相互转换.

在这里插入图片描述

1、获取指定位置的字符
String str = “hello” ;

String str = "hello" ; 
System.out.println(str.charAt(0)); // 下标从 0 开始
// 执行结果
h

2、 字符串与字符数组的转换

String str = "helloworld" ; 
// 将字符串变为字符数组
char[] data = str.toCharArray() ; 
for (int i = 0; i < data.length; i++) { 
 System.out.print(data[i]+" "); 
} 
// 字符数组转为字符串
System.out.println(new String(data)); // 全部转换
System.out.println(newString(data,5,5)); // 部分转换

字节与字符串
在这里插入图片描述

小结:
byte[] 是把 String 按照一个字节一个字节的方式处理, 这种适合在网络传输, 数据存储这样的场景下使用. 更适合针对二进制数据来操作.
char[] 是吧 String 按照一个字符一个字符的方式处理, 更适合针对文本数据来操作, 尤其是包含中文的时候.

字符串比较
在这里插入图片描述
字符串查找
在这里插入图片描述
字符串替换
在这里插入图片描述

字符串拆分
在这里插入图片描述
字符串截取
在这里插入图片描述
其他操作方法
在这里插入图片描述

StringBuffer 和 StringBuilder

1、String和StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer与StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StingBuffer。
2、StringBuffer与StringBuilder大部分功能是相似的
3、StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作
继承结构:
在这里插入图片描述
String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:
1、String变为StringBuffer:利用StringBuffer的构造方法或append()方法
2、StringBuffer变为String:调用toString()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值