Java学习----String类与StringBuilder的学习理解

String类

定义:String类是用来表示字符串的数据类型,是一个引用数据类型。

String类型的语法表示

String s1 = "字符串";//当作基本数据类型使用,不开辟新的空间,s1值存放在常量池中。

String s1 = new String("字符串");//作为引用数据类型使用,开辟一个新的空间,存放s1的值。

String类所表示的字符串,具有不变性的特点,就是它们String类型的值在创建后不能被更改。这里解释建议看:(131条消息) 如何理解java中String的不可变性_leo825...的博客-CSDN博客

实例:

String s1 = "abc";
System.out.println("s1="+s1);
System.out.println("--------------");
String s2 = new String("abc");
System.out.println("s2="+s2);
结果:
s1=abc
--------------
s2=abc

虽然s1与s2的输出结果一样,但是s1与s2在JVM中所存储的地址是不一样的,这里小编没有在Java的API文档中查找到具体显示String类型变量地址的方法。

图示:

String类的功能:

String是用于对字符串进行操作的,其实就是对 (" 字符串 ")两个引号中间的值进行运算,根据问题需求,做出相应的逻辑处理。

String类提供的一些常用方法:

①equals()方法:进行指定对象进行比较,判断两个对象的值是否相等,返回的是 boolean 类型(即true 或者 false),常常用于 if() 判断语句中。

代码示例:

String s1 = "abc";
String s2 = new String("abc");
if (s1.equals(s2)) {
    System.out.println("s1的值是否和s2的值一样:"+true);
} else {
    System.out.println("s1的值是否和s2的值一样:"+false);
}
结果:
s1的值是否和s2的值一样:true
String s1 = "abc";
String s2 = new String("cde");
if (s1.equals(s2)) {
    System.out.println("s1的值是否和s2的值一样:"+true);
} else {
    System.out.println("s1的值是否和s2的值一样:"+false);
}
结果:
1的值是否和s2的值一样:false

②charAt()方法:返回char指定的索引处的值,返回值为char类型

示例:

String s1 = "abc";//char[] s1= {'a','b','c'};
char[] s2 = {'a','b','c'};//和String类型表示的s1一样
System.out.println(s1.charAt(0));
System.out.println("-------------");
System.out.println(s1.charAt(0));
结果:
a
-------------
a

还有一些字符串常用方法:

例如:contains()、length()、replace()、trim()、split().........这些方法在Java的API文档中都可以看到,想要学习的小伙伴自行去查看。


StringBuilder类

定义:用来表示一个可变的字符串序列,底层实现机制是通过一个char类型的数组表示,数组默认长度为16.

StringBuilder类的语法表示:

StringBuilder 变量名 = new StringBuilder();//无参构造

StringBuilder 变量名 = new StringBuilder("字符串");//有参构造,这里可以传入数字容量、字符串

已经有String类表示字符串了,为什么还要使用StringBuilder类来声明字符串呢?

这里必须肯定的是StringBuilder类中的一些方法在处理字符串上面比String类型的方法使用起来方便简单且高效,所以才会有StringBuilder类的出现。(哈哈哈哈哈,因为好用所以才会用,没毛病)

StringBuilder类的特点:

StringBuilder类中的方法,是通过对地址所对应的数据进行修改,就是说使用StringBuilde类中的方法对数据进行修改一次,就会在被保存在原数据中。

示例:

StringBuilder sb = new StringBuilder("abc");
System.out.println(sb);//输出变量sb的值
sb.append("d");//对原数据进行追加 "d",保存在原数据中
System.out.println(sb);//此时输出sb的值,则会显示"abcd"

结果:
abcd

这里通过StringBuilder类中的 append() 方法对原数据在末尾进行追加,这里有一个内存结构对比。

①append方法:对原字符串进行添加时,直接在尾部进行添加,不用再开辟新的空间。

append()方法进行在原字符串的尾部进行追加,如果存在追加字符串长度超过16个字符,那么则会进行扩增,如果进行查看源码可以知道底层有一个getChars()方法进行拼接。

②reverse()方法

StringBuilder sb = new StringBuilder("abc");
sb.reverse();//进行反转操作
System.out.println(sb);

结果:
cba

还有一些其他方法:insert()、indexOf()、toString()、replace()方法,小伙伴们自行尝试。


String和StringBuilder的关系:

对于需求、效率带来的问题,选择对应的类也不同:

比如:

①像StringBuilder类说到的追加元素值的问题,可以利用append()方法在元素后面直接追加,不用开辟新的空间,就很方便。如果用了String类型,则需要开辟新的空间,消耗时间和空间,效率很明显。

②如果想要进行字符串变量值的比较。那么可以直接用String类型中的equals()方法,可以直接判断值是否相等,而StringBuilder类中就没有可以直接判断值相等的方法。这种需求就显而易见,String类型较为方便。

其实还是看具体的需求,然后再进行处理,以下是如何进行String与StringBuilder的转化:

String--->StringBuilder : 可以直接通过StringBuilder()的构造器方法进行转化

String s1 = "abc";
StringBuilder sb = new StringBuilder(s1);
System.out.println(sb);

结果:
abc

StringBuilder--->String: 可以通过StringBuilder中的toString()方法实现

StringBuilder sb = new StringBuilder("abc");
String s1 = sb.toString();
System.out.println(s1);

结果:
abc

以上就是小编的个人理解,如果有出错的地方请评论告知!!!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值