对String的初步认识

1、字符串基本性质

String是SUN写好的一个内置类,java.lang.String。

String的底层是用byte[]进行存储数据。

String类是用final修饰的,调用者不能对其中的属性和方法修改。是线程安全的。

凡是直接用双引号创建的都是String对象,这类String对象都在方法区的字符串常量池中创建,一旦创建不可改变,都会占用空间。

字符串对象都有length()方法,可以获取字符串的长度

2、String对象的两种创建方式和区别

//方式1
String str1 = "abc";
//方式1在JVM中,是在栈中创建了变量str1,在方法区的字符串常量池创建了对象"abc"。然后栈中的变量str1直接指向了方法区的对象"abc"。只创建了一个对象。


//方式2
String str2 = new String("abc");
//方式2在JVM中,是在栈中创建了变量str2,在堆中创建new了对象string,在方法区的字符串常量池创建了对象"abc"。然后栈中的变量str2指向的是堆中的对象string,再有对象string指向方法区中的对象"abc"。创建了两个个对象。

3、字符串判断是否内容相等

字符串判断是否内容相等时,用equals方法,不要用==

SUN重写了String 的equals方法,可以直接比较两个字符串的值。

建议:"字符串".equals(字符串变量名)这样使用equals,可以避免空指针异常

4、字符串拼接

进行字符串拼接操作,较少的字符串的连接可以用+,也可以使用StringBuffer/StringBuilder的append方法,后者可以减少内存的损耗。

//变量str1和str2是指向字符串常量池中的同一个字符串对象
String str1 = "a"+"b";
String str2 = "abc";

//用+做字符串拼接,是在堆中创建了新的String对象,再让变量str3指向它
//以下相当于new String("abc"),和上面的在内存创建形式是不同的
String str3 = str1+"c";

5、String对象内存图

6、String类中常用的构造方法

  1. "字符串"  常用

  2. new String("字符串") 常用

  3. new String(byte/char类型的一维数组 ) 传入一个byte/char数组

  4. new String(byte/char类型的一维数组、int截取数组的起始下标、int截取长度)

7、String类中常用的方法

char c = "字符串".charAt(int index)

        通过字符串下标index获取字符

int compareResult = "字符串1".compareTo("字符串2")

        比较两个字符串的大小,从首个字符开始依次比较

compareResult 有三个值:

        0表示两字符串相等,-1表示字符串1小于字符串2,1表示字符串1大于字符串2

boolean result = "字符串1".contains("字符串2")

        判断字符串1中是否包含字符串2,包含返回true,不包含返回false

boolean result = "字符串1".endwith("字符串2")

        判断字符串1中是否以字符串2结尾,是以字符串2结尾返回true,不是返回false

boolean result = "字符串1".equals("字符串2")

        比较字符串1的值是否等于字符串2(不忽略大小写),相等返回true,不相等返回false

boolean result = "字符串1".equalsIgnore("字符串2")

        比较字符串1的值是否等于字符串2(忽略大小写),相等返回true,不相等返回false

byte[] byteArr = "字符串".getBytes()

        将字符串转成byte数组

int index = "字符串1".indexOf("字符串2")

        返回字符串2在字符串1中第一次出现处的下标/索引,没有就返回-1

int index = "字符串1".lastIndexOf("字符串2")

        返回字符串2在字符串1中最后一次出现处的下标/索引,没有就返回-1

boolean result = "字符串".isEmpty()

        判断字符串是否是空字符串,是返回true,不是返回false

int length = "字符串".length()

        返回字符串的长度

String newStr= "字符串".replace("字符串的片段","替换字符串片段")

        返回替换后的新的字符串

String[] strs ="字符串".split ("分隔符")

        返回按指定分隔符拆分后的字符串数组

boolean result = "字符串1".startsWith("字符串2")

        判断字符串1 是否是以字符串2开始,是返回true,不是返回false

String newStr = "字符串".substring(beginIndex)

        将字符串从下标beginIndex(包括该下标的字符)截取到最后,返回截取到的字符串

String newStr = "字符串".substring(beginIndex,endIndex)

        将字符串从下标beginIndex(包括该下标的字符)截取到下标为endIndex前一个字符,返回截取到的字符串

char[] charArr = "字符串".toCharArray()

        将字符串转换为char数组

String newStr = "字符串".toLowerCase()

        将字符串全部转为小写形式,返回一个新的字符串

String newStr = "字符串".toUpperCase()

        将字符串全部转为大写形式,返回一个新的字符串

String newStr = "字符串".trim()

        去掉字符串的前后空格,返回一个新的字符串

String Str = String.valueOf(非字符串)

        将非字符串转为字符串

8、StringBuffer和StringBuider

StringBuffer可以理解为:用来接收数据的缓存。

StringBuffer和StringBuider这两个内置类都可以用作字符串拼接,但主要java还是提供StringBuider用作字符串拼接。

StringBuffer和StringBuider底层都是byte[]数组,往他们中存放数据,其实就是放到byte[]中,这个数组的默认初始化容量是16个字符。

建议:在创建StringBuffer和StringBuider对象时,尽量可能给定一个合适初始化容量,减少底层数组的扩容次数

StringBuffer和StringBuider的区别是:前者是线程安全的,后者是非线程安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿一直学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值