Java基础学习笔记

目录

前言

一、String,StringBuffer,StringBuilder是什么?

二、String,StringBuffer,StringBuilder的使用

        1.String

                1.1常用的方法

                1.2使用场景

        2.StringBuffer

                2.1常用方法

                2.2使用场景

        3.StringBuilder

                3.1常用方法

                3.2使用场景

三、String,StringBuffer,StringBuilder的相同点和不同点

        1.相同点:

        2.不同点:

                2.1可变性:

                2.2线程安全性:

                2.3性能:

总结



前言

在本周的Java学习中,学习了Java中的常用类,其中包括有引用类型String,以及String Buffer,StringBulider类,这篇博客主要介绍这三者的共同点和区别。


一、String,StringBuffer,StringBuilder是什么?

String、StringBuffer和StringBuilder都是Java中用来处理字符串的类。

        1.String

String是Java中最常用的字符串类。它是不可变的,一旦创建就不能修改。每次对String进行修改操作,都会创建一个新的对象。String类提供了许多方法来操作字符串,如连接、截取、替换等。String类的不可变性使其在多线程环境下是线程安全的。

示例代码:

String str = "Hello";
str = str + " World";
System.out.println(str); // 输出:Hello World

        2.StringBuffer

StringBuffer也是用来处理字符串的类,它是可变的。即可以修改已有对象的值,而不会创建新的对象。StringBuffer类提供了许多方法来修改、连接、插入和删除字符串的内容。它是线程安全的,适用于多线程环境。

StringBuffer stringBuffer = new StringBuffer("Hello");
stringBuffer.append(" World");
System.out.println(stringBuffer.toString()); // 输出:Hello World

        3.StringBuilder

StringBuilder与StringBuffer类似,也是可变的字符串类,可以修改已有对象的值,而不会创建新的对象。StringBuilder类也提供了许多方法来修改、连接、插入和删除字符串的内容。然而,它不保证线程安全,适用于单线程环境。由于非线程安全的特性,StringBuilder具有更好的性能。

StringBuilder stringBuilder = new StringBuilder("Hello");
stringBuilder.append(" World");
System.out.println(stringBuilder.toString()); // 输出:Hello World

二、String,StringBuffer,StringBuilder的使用

        1.String

                1.1常用的方法

  • length():返回字符串的长度。
  • charAt(index):返回字符串中指定位置的字符。
  • substring(beginIndex, endIndex):获取字符串的子串,从beginIndex开始(包含),到endIndex结束(不包含)。
  • concat(str):将指定的字符串连接到原字符串的末尾,并返回一个新的字符串。
  • indexOf(str):返回指定子串在字符串中第一次出现的位置。
  • contains(str):判断字符串是否包含指定的子串,返回布尔值。
  • replace(oldStr, newStr):将字符串中的某个字符或子串替换为指定的新字符或新字符串。
  • split(separator):将字符串按照分隔符(separator)分割成多个子串,返回字符串数组。
  • toLowerCase():将字符串中的字符全部转换为小写。
  • toUpperCase():将字符串中的字符全部转换为大写。

上述方法的示例代码:

String str = "Hello World";

// length()
int length = str.length();
System.out.println("Length: " + length);

// charAt(index)
char ch = str.charAt(6);
System.out.println("Character at index 6: " + ch);

// substring(beginIndex, endIndex)
String subStr = str.substring(6, 11);
System.out.println("Substring: " + subStr);

// concat(str)
String newStr = str.concat("!");
System.out.println("Concatenated String: " + newStr);

// indexOf(str)
int index = str.indexOf("World");
System.out.println("Index of 'World': " + index);

// contains(str)
boolean contains = str.contains("Hello");
System.out.println("Contains 'Hello': " + contains);

// replace(oldStr, newStr)
String replacedStr = str.replace("World", "Universe");
System.out.println("Replaced String: " + replacedStr);

// split(separator)
String[] splitStr = str.split(" ");
System.out.println("Split String: ");
for (String s : splitStr) {
    System.out.println(s);
}

// toLowerCase()
String lowerCaseStr = str.toLowerCase();
System.out.println("Lowercase String: " + lowerCaseStr);

// toUpperCase()
String upperCaseStr = str.toUpperCase();
System.out.println("Uppercase String: " + upperCaseStr);

                1.2使用场景

  • String:适用于不需频繁修改字符串内容的情况,如字符串常量、少量操作字符串的场景。

        2.StringBuffer

                2.1常用方法

  • append(str):将指定的字符串追加到当前StringBuffer对象的末尾。
  • insert(offset, str):在指定的位置插入一个字符串到当前StringBuffer对象中。
  • delete(start, end):删除指定范围内的字符,包括开始位置的字符而不包括结束位置的字符。
  • replace(start, end, str):替换指定范围内的字符串为新的字符串。
  • reverse():将StringBuffer对象中的字符序列进行反转操作。
  • substring(start):获取从指定位置开始到字符串末尾的子串。
  • substring(start, end):获取指定范围的子串,包括开始位置的字符而不包括结束位置的字符。
  • length():返回字符串缓冲区中的字符数。
  • capacity():返回字符串缓冲区的当前容量。

示例代码:

StringBuffer stringBuffer = new StringBuffer("Hello World");

// append(str)
stringBuffer.append("!");
System.out.println("Appended String: " + stringBuffer);

// insert(offset, str)
stringBuffer.insert(5, "Awesome ");
System.out.println("Inserted String: " + stringBuffer);

// delete(start, end)
stringBuffer.delete(5, 13);
System.out.println("Deleted String: " + stringBuffer);

// replace(start, end, str)
stringBuffer.replace(0, 5, "Hi");
System.out.println("Replaced String: " + stringBuffer);

// reverse()
stringBuffer.reverse();
System.out.println("Reversed String: " + stringBuffer);

// substring(start)
String subString = stringBuffer.substring(6);
System.out.println("Substring: " + subString);

// substring(start, end)
String subString2 = stringBuffer.substring(0, 2);
System.out.println("Substring: " + subString2);

// length()
int length = stringBuffer.length();
System.out.println("Length: " + length);

// capacity()
int capacity = stringBuffer.capacity();
System.out.println("Capacity: " + capacity);

                2.2使用场景

  • StringBuffer:适用于多线程环境下需要频繁修改字符串内容的场景。

        3.StringBuilder

                3.1常用方法

StringBuilder类的方法与StringBuffer类的方法基本相同,不同之处在于StringBuilder类不保证线程安全,所以在单线程环境下性能更好。

示例代码:

StringBuilder stringBuilder = new StringBuilder("Hello World");

// append(str)
stringBuilder.append("!");
System.out.println("Appended String: " + stringBuilder);

// insert(offset, str)
stringBuilder.insert(5, "Awesome ");
System.out.println("Inserted String: " + stringBuilder);

// delete(start, end)
stringBuilder.delete(5, 13);
System.out.println("Deleted String: " + stringBuilder);

// replace(start, end, str)
stringBuilder.replace(0, 5, "Hi");
System.out.println("Replaced String: " + stringBuilder);

// reverse()
stringBuilder.reverse();
System.out.println("Reversed String: " + stringBuilder);

// substring(start)
String subString = stringBuilder.substring(6);
System.out.println("Substring: " + subString);

// substring(start, end)
String subString2 = stringBuilder.substring(0, 2);
System.out.println("Substring: " + subString2);

// length()
int length = stringBuilder.length();
System.out.println("Length: " + length);

// capacity()
int capacity = stringBuilder.capacity();
System.out.println("Capacity: " + capacity);

                3.2使用场景

  • StringBuilder:适用于单线程环境下需要频繁修改字符串内容的场景,性能优于StringBuffer。

三、String,StringBuffer,StringBuilder的相同点和不同点

        1.相同点:

  • 它们都是用来存储和操作字符串的,属于不可变对象(Immutable Objects)。这意味着每次对字符串进行修改时,都会创建一个新的对象,原始对象不会被改变。
  • 它们都继承自抽象类AbstractStringBuilder。
  • 它们都提供了许多方法来操作字符串,如追加、删除、替换、查找等。

        2.不同点:

                2.1可变性:

  • String:是不可变类,一旦创建就不能修改。每次对String进行修改操作,都会创建一个新的对象。
  • StringBuffer:是可变类,可以修改已有对象的值,而不会创建新的对象。线程安全的,适用于多线程环境。
  • StringBuilder:是可变类,类似于StringBuffer,但是不保证线程安全。在单线程环境下,StringBuilder的性能比StringBuffer更好。

                2.2线程安全性:

  • String:是不可变类,所以是线程安全的。
  • StringBuffer:是线程安全的,通过使用同步方法和同步代码块来保证线程安全性。
  • StringBuilder:是非线程安全的,不提供同步支持。

                2.3性能:

  • String:由于不可变性,每次操作都会创建新的对象,所以在大量修改字符串的场景下,可能会产生大量的对象,影响性能。
  • StringBuffer:由于是线程安全的,对方法进行了同步,所以在线程安全的情况下,性能相对较差。
  • StringBuilder:由于不保证线程安全,不需要进行同步,所以在线程安全无关的情况下,性能最好。

总结

  • 如果需要频繁修改字符串内容,并且在多线程环境下,应使用StringBuffer。
  • 如果需要频繁修改字符串内容,并且在单线程环境下,应使用StringBuilder。
  • 如果字符串内容不需要修改,则使用String即可。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值