JAVA中String和StringBuilder类的特点及使用

转自:https://www.imooc.com/code/2202

仅做个人学习记录之用,侵删!

什么是 Java 中的字符串

在 Java 中,字符串被作为 String 类型的对象处理。 String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。

创建 String 对象的方法:

Java 中字符串的不变性

String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如下所示:

运行结果:

结合上面的代码,关于字符串小伙伴们必须需要了解滴:

1、 通过 String s1="爱慕课"; 声明了一个字符串对象, s1 存放了到字符串对象的引用,在内存中的存放引用关系如下图所示:

然后通过 s1="欢迎来到:"+s1; 改变了字符串 s1 ,其实质是创建了新的字符串对象,变量 s1 指向了新创建的字符串对象,如下图所示:

2、 一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以使用StringBuffer或者StringBuilder(后面章节中会讲到)。

3、 每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法(前面条件运算符章节讲过哦~~)

Java 中 String 类的常用方法 Ⅰ

String 类提供了许多用来处理字符串的方法,例如,获取字符串长度、对字符串进行截取、将字符串转换为大写或小写、字符串分割等,下面我们就来领略它的强大之处吧。

String 类的常用方法:

结合代码来熟悉一下方法的使用:

运行结果:

友情提示:

1. 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1

2. 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1

3. 使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符

针对如此繁杂的方法,推荐大家一个学习技巧:好记性不如烂笔头!多看的同时一定要多敲哦~~

Java 中的 String 类常用方法 Ⅱ

我们继续来看 String 类常用的方法,如下代码所示:

运行结果:

那么,“==” 和 equals() 有什么区别呢?

==: 判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象

equals(): 比较存储在两个字符串对象中的内容是否一致

PS:字节是计算机存储信息的基本单位,1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节1 个英文字符存储需要 1 个字节。所以我们看到上面的程序运行结果中,每个汉字对应两个字节值,如“学”对应 “-47 -89” ,而英文字母 “J” 对应 “74” 。同时,我们还发现汉字对应的字节值为负数,原因在于每个字节是 8 位,最大值不能超过 127,而汉字转换为字节后超过 127,如果超过就会溢出,以负数的形式显示。(关于编码,我们在后面课程中会详细介绍,小小期待哦~~)

示例:

public class HelloWorld {
    public static void main(String[] args) {
		// 定义一个字符串
		String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";

        // 出现次数
		int num = 0;

         // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数
		for ( int i=0; i< s.length();i++ )
		{
            // 获取每个字符,判断是否是字符a
			if ( s.charAt(i) == ‘a‘ ) {
                // 累加统计次数
				num++;
			}
		}
		System.out.println("字符a出现的次数:" + num);
	}
}

  输出:

字符a出现的次数:8

认识 Java 中的 StringBuilder 类

在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么它们之间有什么区别呢?

String 类具有是不可变性。如

运行结果:  

从运行结果中我们可以看到,程序运行时会额外创建一个对象,保存 "helloworld"。当频繁操作字符串时,就会额外产生很多临时变量。使用 StringBuilder 或 StringBuffer 就可以避免这个问题。至于 StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。

那么如何定义 StringBuilder 类的对象呢? 我们来看下面的代码:

运行结果: imooc

Java 中的 StringBuilder 类的常用方法

StringBuilder 类提供了很多方法来操作字符串:

例如:在下面的示例代码中,创建了 StringBuilder 对象,用来存储字符串,并对其做了追加和插入操作。这些操作修改了 str 对象的值,而没有创建新的对象,这就是 StringBuilder 和 String 最大的区别。

运行结果: 

示例:

public class HelloWorld {
    public static void main(String[] args) {
		// 创建一个空的StringBuilder对象
		StringBuilder str = new StringBuilder();

		// 追加字符串
		str.append("jaewkjldfxmopzdm");

        // 从后往前每隔三位插入逗号
		for(int i =(str.length()-3); i > 0 ;i-=3){
		    str.insert(i,",");
		}

        // 将StringBuilder对象转换为String对象并输出
		System.out.print(str.toString());
	}
}

  输出:

j,aew,kjl,dfx,mop,zdm

原文地址:https://www.cnblogs.com/chengshan/p/12272443.html

时间: 2024-10-11 20:54:23

JAVA中String和StringBuilder类的特点及使用的相关文章

java中String与StringBuilder的区别

本篇文章介绍了,java中String与StringBuilder的区别. 相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE 5.0 里面带来的一个新的字符操作的类—— StringBuilder (先别忙着扔我砖头,我还算清醒,我这里说的不是 C #, Java 也有 StringBuilder 类).那么这个 StringBuilder 和

探秘Java中String、StringBuilder以及StringBuffer

探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景.下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String.StringBuffer.StringBuilder 三.不同场景下三个类的性能测试 四.常见的关于

java中String 、 StringBuilder 和 StringBuffer的联系与区别

String作为java中最基本的类,担负着承载字符信息的作用.String具有不可变的final属性 , 这也决定了它对于在程序中传递信息的不可或缺性 .开发中,我们常常要对字符串进行拼接,这时我们会用到String对象重载的“+”操作符或concat(str)方法,也可以用StringBuilder.StringBuffer对象的append(str)方法来实现. 那么,String.StringBuilder.StringBuffer之间到底有什么联系和区别? 什么情况下分别适合使用这三个

java中String、StringBuilder和StringBuffer理解

String.StringBuilder和StringBuffer理解 1>String java.lang.String 类 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache th

java中String、StringBuilder、StringBuffer三者的区别

在Java项目开发中,字符串是最长使用的数据类型,而有关字符串的String.StringBuilder.StringBuffer三者又常常让人分不清楚什么时候该使用哪个. 特此整理一下. String字符串常量 大家都知道String是一个不可变的类,任何对String的改变都会引发新的String对象的生成:因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,

java中String、stringbuilder、stringbuffer区别

1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的.每次对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收. Private final char value[]; StringBuider与stringbuffer都继承自AbstractStringBuider类,在abstractstringbuilder中也是

java中String&amp;StringBuffer&amp;StringBuilder

1. String,字符串常量 StringBuffer,字符串变量(线程安全) StringBuilder,字符串变量(非线程安全) 2.String and StringBuffer String和StringBuffe的主要区别在于String是不可变对象,每次对String进行改变的时候其实 等于生成了一个新的String对象,因此经常改变内容的字符串不要使用String类型,因为每次形成新的对象都会对系统的性能产生影响,特别当内存中的无引用的对象多了之后,JVM的GC就会开始工作,那速

Java中String、StringBuilder和StringBuffer的区别

---恢复内容开始--- String字符串常量 StringBuffer字符串变量(线程安全) StringBuilder字符串变量(非线程安全) String是常量,该对象的值已经被赋予了,不能再更改.若非要更改,则只能再重新创建另一个对象,在这个新创建的对象上再进行赋值. StringBuffer是变量,是可以随时变化的量.如果对StringBuffer对象进行改变,每次结果都会对StringBuffer对象进行操作,而不是生成新的对象.所以一般字符串要经常变化的话推荐使用StringBu

Java之String,StringBuffer,StringBuilder类

在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBuilder 长度是可变的; 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的.就是说StringBuffer类中的很多方法使用了synchronized关键字修饰,允许多线程进行操