String初相识

String

String表示一个字符串,它的内部是一个字符数组,只用使用方法比较特殊

例如: String str = “Hello World”;

String类的重要特点:字符串是不变的; 它的值在创建后不能被更改。

创建了几个对象

String str = "Hello";
str += "World";
System.out.println(str);//"HelloWorld"
//整个过程产生了3个String对象;

相等吗

String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2);//true

String ss1 = new String("Hello");
String ss2 = new String("Hello");
System.out.println(s1 == ss1);//false
System.out.println(ss1 == ss2);//false
String s1 = "Hello";
String s2 = "World";
String s3 = "HelloWorld";
String s4 = "Hello" + "World";//String s4 = "HelloWorld";
System.out.println(s3 == s4);//true

String s5 = s1 + "World";//String s5 = new String("HelloWorld");
String s6 = "Hello" + s2;//String s6 = new String("HelloWorld");
String s7 = s1 + s2;//String s7 = new String("HelloWorld");
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false

判断方法

String str1 = "hello";
String str2 = "HELLO";
//1).public boolean equals (Object anObject) :将此字符串与指定对象进行比较。
System.out.println(str1.equals(str2));//false
//2).public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小写。
System.out.println(str1.equalsIgnoreCase(str2));//true

获取方法

String str1 = "hello";
String str2 = "world";
/**
*1).public int length () :返回此字符串的长度。
*/
System.out.println(str1.length());//5    
/**
*2).public String concat (String str) :将指定的字符串连接到该
*字符串的末尾。相当于+
*/
System.out.println(str1.concat(str2));//helloworld 
/**
* 3).public char charAt (int index) :返回指定索引处的 char值。
*/
System.out.println(str1.charAt(2));//l   
/**
*4).public int indexOf (String str) :查找参数字符串在本字符串中的
*索引位置。如果没有出现,返回-1
*/
System.out.println(str1.indexOf("o"));//4
/**
*5).public String substring (int beginIndex) :返回一个子字符串,
*从beginIndex开始截取字符串到字符串结尾。
*/
System.out.println(str1.substring(2));//llo
/**
*6).public String substring (int beginIndex, int endIndex) :
*返回一个子字符串,从beginIndex到endIndex截取字符串。
* 含beginIndex,不含endIndex。
*/
System.out.println(str1.substring(2, 4));//ll

转换方法

/**
* 1).public String replace (CharSequence target, CharSequence replacement) 
* 将与target匹配的字符串使用replacement字符串替换。
*/
System.out.println(str1.replace("llo", "he"));//hehe

//replace的oldStr只能是字符和字符串,replaceAll指的是正则表达式,比如'\r'回车 '\n'空格

分割方法

String str1 = "h-e-l-l-o";
/**
 * 1).public String[] split(String regex) :将此字符串按照给定的regex
 *(规则)拆分为字符串数组。
 */
for (String s : str1.split("-")) {
  System.out.print(s);
}

StringBuilder

​ StringBuilder是一个可变的字符序列。我们可以把它看成一个可变的字符串。

​ StringBuilder的本质和String一样,都是由一个字符数组组成的,在使用字符数组保存数据。

构造方法

/**
 * StringBuilder(): 空参构造。使用这个构造方法创建的StringBuilder对象,
*里面不会保存任何内容
 */
StringBuilder stringBuilder = new StringBuilder();
/**
* StringBuilder(String str):会根据参数字符串构建一个StringBuilder对象
*/
StringBuilder strBuilder = new StringBuilder("hello");

常用方法

StringBuilder stringBuilder1 = new StringBuilder("hello");
StringBuilder stringBuilder2 = new StringBuilder("world");
/**
 *   1).append(): 字符串连接
 */
StringBuilder stringBuilder = stringBuilder1.append(stringBuilder2);
System.out.println(stringBuilder);
/**
*   2).toString():返回相同内容的字符串
*/
String string = stringBuilder.toString();
 System.out.println(string);

String与StringBuilder的区别

​ String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响。

​ StringBuilder又称为可变字符序列,是JDK5.0中新增加的一个类,它是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。即它是一个容器,容器中可以装很多字符串,并且能够对其中的字符串进行各种操作。它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容,StringBuilder会自动维护数组的扩容。

String StringBuffer StringBuilder

​ String被final修饰,所以String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,所以String s = new String(“helloWorld”); 创建了2个String对象和一个引用。

​ 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值