Java中String类

1.java.lang.String类型的基本性质:

        ①String表示字符串类型,属于引用数据类型,不属于基本数据类型;

        ②在java中用双引号括起来的都是String对象;

        ③java中规定,双引号括起来的字符串是不可变的,也就是说"abc"自出生到最终死亡,不可

          变,不能变成"abcd",也不能编程"ab";

        ④在JDK当作把双引号括起来的字符串直接存储在"方法区"的"字符串常量池"当中的。

                为什么要这样做?因为字符串在时机的开发中使用太频繁,为了执行效率,所以把字符

              串放到了方法区的字符串常量池当中。

                以下代码会产生"abcdef"、"xy"、"abcdefxy"三个字符串对象。

        ⑤String类型的对象也可以使用new关键字来创建对象:

                String s3  =  new String("xy");

                注意:new对象的时候一定会在堆内存中开辟空间,而这个空间内保存的就是该字符串

              对象在字符串常量池中的内存地址。        

                看以下程序段:

2.一个小问题:

3.String类的构造方法、常用方法等查阅JavaAPI帮助手册即可。

4.注意:判断数组长度和字符串长度不一样。

        数组长度是length属性。

        字符串长度是length()方法

5.String中只有一个方法是静态的,不需要new对象。

        valueOf():将非字符串转换成字符串。如果传入的是一个对象,则会调用该对象的toString方

      法,并返回调用该方法后的字符串。

6.我们在实际开发中,如果需要进行字符串的频繁拼接(利用+加号),会有什么问题?

        因为java中的字符串是不可变的,每一次拼接都会产生新字符串,这样会占用大量的方法区内

      存,造成内存空间的浪费。

   如果以后需要进行大量字符串的拼接操作,建议使用JDK中自带的:

        java.lang.StringBuffer:底层实际上是一个byte[]数组,往StringBuffer中放字符串,实际上

      是放到byte[]数组当中了。StringBuffer的初始容量是16。拼接字符串时调用append()方法

      可,append()方法底层在进行追加的时候,如果byte[]数组满了,会自动扩容,底层调用的就是

      System.arraycopy()方法。String中的底层也是一个byte[]数组,但是该数组被final修饰,因

      此不可变(并且被final修饰的引用一旦指向某个对象之后,不可再指向其他对象)。

                如何继续优化StringBuffer的性能?

                        在创建StringBuffer对象的时候尽可能给定一个初始化容量,最好减少底层数组的扩

                      容次数,预估计一下,给一个大一些的初始化容量。

        java.lang.StringBuilder:初始化容量也是16.

        StringBuffer和StringBuilder的区别?

                StringBuffer中的方法都有synchronized关键字修饰,因此StringBuffer在多线程环境下运

              行是安全的;而StringBuilder中的方法都没有synchronized关键字修饰,因此StringBuffer

              在多线程环境下运行是不安全的。即StringBuffer是线程安全的,StringBuilder是非线程

              安全的

PS:根据动力节点课程整理,如有侵权,联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值