字符串 -1- String

本文深入解析Java中的字符串类,包括String、StringBuffer和StringBuilder的区别,探讨字符串常量池的概念,以及字符串类的各种实用方法,如判断、转换、替换等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串类:

java将与字符串相关的功能面向对象了,形成的类就是字符串类.表示方法 "  "。

字符串分为两类

一:String类 (不可变)字符串:字符串对象一旦被初始化,就不可以改变

二:Stringbuffer/StringBuilder类  可变字符串:字符串对象可以改变

注意:这里讨论的是对象可不可变,而不是引用

String s = "QQQQQQQ";
s = "WWWWWWW";
System.out.println(s);
//输出 wwwwwww

//这里则是引用变了,而非字符串对象或者是字符串常量变了

String类

存在于java.lang包中,被final修饰,不能被继承,里面的方法也不能被重写

String类对象的内存

1.String s1 = "1000phone";
2.String s2 = "1000phone";
3.String s3 = new String("1000phone");
4.String s4 = new String("1000phone");

System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1 == s4);
System.out.println(s2 == s3);
System.out.println(s2 == s4);
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
//输出 true false false false false false  true


/*
String类将Object类中的equals()方法重写了,改成比较两个对象的内容
字符串常量或叫(不可变)字符串存在于堆中的一个叫做常量区的特殊区域,内容相同的字符串常量只允许存储一份

执行1时,会首先到常量区找内容为"1000phone"的字符串,找不到则会在常量区开辟空间,存储"1000phone",执行2时,同理,则s1和s2指向同一个字符串对象,故 s1=s2。
执行3时,因为有new关键字,会在堆中开辟空间创建一个对象,s3则是指向这个对象的引用,而这个对象则会去常量区寻找内容为"1000phone"的字符串,找到了则直接指向,找不到才会在常量区开辟空间存储"1000phone"

所以我们常说:
String s1 = “abc” 和 String s2 = new String(“abc”)的区别就是:
s1在内存中有一个对象
s2在内存中有两个对象
*/

String类中常用的方法

//判断类

String s = "1000phone"; 

//判断是否包含一个字字符串
//boolean contains(CharSequence s)
System.out.println(s.contains("1000"));

//判断两个字符串的内容是否相同
//boolean equals(Object anObject)
System.out.println(s.equals("1000PHONE"));

//忽略大小写判断两个字符串内容是否相同
//boolean equalsIgnoreCase(String anotherString)
System.out.println(s.equalsIgnoreCase("1000PHONE"));

//判断是否是以某字符串开头
//boolean startsWith(String prefix)
System.out.println(s.startsWith("1000"));

//判断是否以某字符串结尾
//boolean endsWith(String suffix)
System.out.println(s.endsWith("one"));

//输出:true false true true true
//转换

//将字符数组转成字符串
//使用构造方法
//String(char[] value)
char[] arr1 = {'H','e','l','l','o'};
String s1 = new String(arr1);
System.out.println(s1);
//String(char[] value,int offset,int count)
String s2 = new String(arr1,2,3);
System.out.println(s2);
//使用静态方法
//static String copyValueOf(char[] data)
//static String copyValueOf(char[] data,int offset,int count)
String s3 = String.copyValueOf(arr1,3,2);
System.out.println(s3);


//将字符串转成字符数组
//char[] toCharArray()
char[] arr2 = s1.toCharArray();
System.out.print(arr2);

//将字节数组转成字符串
//String(byte[] bytes) //默认编码为GBK
//String(byte[] bytes,int offset,int length)
//String(byte[] bytes,String charsetName)
byte[] arr3 = {-60,-29,-70,-61};
System.out.println(new String(arr3,"utf8"));


//将字符串转成字节数组
//byte[] getBytes() //默认GBK
byte[] arr4 = "Hello".getBytes(); 
System.out.println(Arrays.toString(arr4));

//将基本数据类型转成字符串
//String.valueOf()
System.out.println(String.valueOf(45)+1);
//替换
//String replace (char olderchar,char newChar)
String s= "1000phone";
String s1 = s.replace("phone", "haha");
System.out.println(s+":::"+s1);

//子串
//char charAt(int index)   //提取某个位置的字符
//String subString(int beginIndex)  //包含起始位置到最后一位
//String subString(int beginIndex,int endIndex)  //左闭右开,不包含最后一位
System.out.println(s.charAt(6));          //输出 o
System.out.println(s.subString(4,6));     //输出 ph

//大小写转换
//String toLowerCase()
//String toUpperCase()


//去除空格,只能去除两端的空格
//String trim()
String s2 = "    Hello ,  world   ";
System.out.println(s2.trim()+"|");        //输出 Hello ,  world|


//按字典顺序比较两个字符串
//按照ASCII码比较当前的两个字符,认为ASCII码大的为大字符
//若当前的字符相同,继续比较,只要遇到不同的字符,直接认为大字符所在的字符串为大字符串
//返回第一次两个不同字符的差值(第一个减第二个),若都相同,返回零
//int compareTo(String anotherString)


//切割  作为刀的部分不会出现在新的字符串中
//String[] split(String str)
String s3 = "1000,P,hone";
String[] Strings = s3.split(",");
for(String string : Strings){
   System.out.println(string);
}
//输出
1000
P
hone

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值