1.String
在 Java 中,字符串被作为 String 类型的对象处理。String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。那创建String对象的方法如下:
public class Tesmain {public static void main(String[] args) {// TODO Auto-generated method stubString str1 = "Java Study";String str2 = "Java Study";String str3 = new String();str3 = "Java Study";String str4 = new String("Java Study");String str5 = new String("Java Study");System.out.println(str1 == str2);System.out.println(str1 == str3);System.out.println(str1 == str4);System.out.println(str4 == str5);System.out.println(str4.equals(str5));}}
输出结果如下:
truetruefalsefalsetrue
那么,“==” 和 equals() 有什么区别呢?
==: 判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
equals(): 比较存储在两个字符串对象中的内容是否一致
java为String类型提供了缓冲池机制,当使用双引号定义对象时,Java环境首先去字符串缓冲池寻找相同内容的字符串,如果存在就直接拿出来应用,如果不存在则创建一个新的字符串放在缓冲池中。且该位置字符串相加变成了对象所以是false。
String 类提供了许多用来处理字符串的方法,例如,获取字符串长度、对字符串进行截取、将字符串转换为大写或小写、字符串分割等,下面我们就来领略它的强大之处吧。
2.StringBuffer
在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么它们之间有什么区别呢?
String str = "hello";System.out.println(str + "world");System.out.println(str);
这是我们经常输出的形式。第一个输出:hello world,第二个输出hello
程序运行时会额外创建一个对象,保存 "helloworld"。当频繁操作字符串时,就会额外产生很多临时变量。使用 StringBuilder 或 StringBuffer 就可以避免这个问题。至于 StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用StringBuilder类。
public class HelloWorld {public static void main(String[] args) { // 创建一个StringBuilder对象,用来存储字符串StringBuilder hobby=new StringBuilder("hello world");System.out.println(hobby);}}
StringBuilder 类提供了很多方法来操作字符串:
这里任意创建一个StringBulider字符串,然后冲后往前每三个字符插入一个|进行分隔
// 创建一个空的StringBuilder对象StringBuilder str = new StringBuilder("");// 追加字符串str.append("jaewkjldfxmopzdm");// 从后往前每隔三位插入逗号for(int i = str.length()-3; i >=0 ; i=i-3){str.insert(i,","); }// 将StringBuilder对象转换为String对象并输出System.out.print(str.toString());