Java String、StringBuffer 和 StringBuilder 的区别和理解(一)

简介: Java String、StringBuffer 和 StringBuilder 的区别和理解(一)

String


String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。


String声明为final的,不可被继承


String实现了Serializable接口:表示字符串是支持序列化的实现了Comparable接口:表示String可以比较大小


String在内部定义了final的char型数组(final char[]),用于存储字符串数据。


String代表一个不可变的字符序列。具有不变性。


/** The value is used for character storage. */
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;
/** The count is the number of characters in the String. */
private final int count;

初始化方式:常用的两种:

//通过字面量的方式定义
String s1 = "java";
//通过new + 构造器方式
String s2 = new String("java2");

会开辟两块堆内存空间,不会自动保存在常量池中,可以使用intern()方法手工入池。


String的常用用法详解

1.int length():返回字符串的长度

String s1 ="HelloWorld";
System.out.println(s1.length());//10

2.char chaeAt():返回索引处(index)的字符

String s1 ="HelloWorld";
System.out.println(s1.charAt(5));//W

 3.boolean isEmpty():判断是否是空字符串

String s1 ="HelloWorld";
System.out.println(s1.isEmpty());//false


4.String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写

String s1 ="HelloWorld";
String s2 = s1.toLowerCase();
System.out.println(s2);//helloworld


5.String toUpperCase():使用默认语言环境,将String中的所有字符转换为大写(toLowerCase() 小写)

String str = "HELLO" ; 
System.out.println(str.toLowerCase());  //hello
String str = "hello" ; 
System.out.println(str.toUpperCase());  // HELLO


6.String trim():返回字符串的副本,忽略字符串前和字符串后的空白

String s3 = "     he   ll   o   w  or l d      ";
String s4 = s3.trim();
System.out.println("----------" + s4 + "-----------");
//"he   ll   o   w  or l d"

7.boolean equals():比较两个字符串的内容是否相同

String s6 = "abc";
 String s7 = "cde";
 System.out.println(s6.equals(s7));//false


8.String concat():将指定字符串连接到此字符串的结尾。

String s1 = "abc";
System.out.println(s1.concat("def"))//abcdef


9.int compareTo():比较两个字符串的大小

String s6 = "abc";
String s7 = "cde";
int i = s6.compareTo(s7);
System.out.println(i);//-2


10.String substring((int beginIndex):返回一个新的字符串,它是此字符串的从 beginIndex开始截取到最后的一个子字符串

String s8 = "你是如此美丽";
 String s9 = s8.substring(2);
 System.out.println(s9);//如此美丽


11.boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列 时,返回 true

String str1 = "helloworld";
String str2 = "wo";
boolean b4 = str1.contains(str2);//true

12.int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引

String str1 = "helloworld";
System.out.println(str1.indexOf("lo"));//3
//若不存在,返回-1


13.int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引

String str1 = "helloworld";
System.out.println(str1.lastIndexOf("o"));//6


14.String replace(char oldChar, char newChar):返回一个新的字符串,它是 通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

15.boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。

16.String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。

相关文章
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
86 14
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
66 8
|
2月前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
2月前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
3月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
3月前
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
62 0
|
4月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
49 0
java基础(13)String类
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
64 2
|
3月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
74 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性