String 字符串的基本使用 -- 《JAVA编程思想》39

字符串是日常编码过程中,使用频率相当高的对象。

String 对象其实不可变的,每次修改字符串,实际是创建了一个新的 String 对象。

public class Immutable {

    public static String upCase(String str) {
        return str.toUpperCase();
    }

    public static void main(String[] args) {
        String a = "howdy";
        String b = upCase(a);
        System.out.println("a====="+a);
        System.out.println("b====="+b);
    }
    
}
a=====howdy
b=====HOWDY

上述例子中,当字符串 a 传递至 upCase() 方法时,实际传递的是一份 a 的拷贝,即使引用 a 的值被改变,也不会影响 a 的原始值。

当我们使用 + 号拼接对象时,实际上会生成多次字符串对象。

String str = "god " + " is " + " a " + " girl ";

上述例子拼接了3次字符串,故会生成3个不同的 String 对象:"god is " 、"god is a " 、 "god is a girl "。

当你需要多次拼接字符串的时候,更推荐使用 StringBuilder 来拼接字符串。

        StringBuilder builder = new StringBuilder();
        builder.append("god ");
        builder.append(" is ");
        builder.append(" a ");
        builder.append(" girl ");
        System.out.println(builder);
god  is  a  girl 

使用 + 号拼接字符串时,编译器底层也是使用的 StringBuilder 对象来拼接字符串,但每次使用 + 号,都是额外生成一个 StringBuilder 对象。

当使用 StringBuilder 来拼接字符串时,无论使用 append() 方法拼接了多少次字符串,最终都只会生成一个 StringBuilder 对象,故此类方法更加高效。

不过,若你有线程安全的需求,则需要使用 StringBuffer 来拼接字符串,使用方式和 StringBuilder 类似。

StringBuffer 内所有方法都有 synchronized 关键字修饰,故其是线程安全的,但其效率不如 StringBuilder。

        StringBuffer buffer = new StringBuffer();
        buffer.append("god ");
        buffer.append(" is ");
        buffer.append(" a ");
        buffer.append(" girl ");
        System.out.println(buffer);
god  is  a  girl 

最后一起来看看String对象具备的基本方法:

方法用途
length()获取字符个数
charAt()返回该字符索引位置,不存在则返回 -1
getChars(),getBytes()将指定区间的每个字符转成 char 或 byte 数组
toCharArray()将字符串中的每个字符整合成 char 数组
equals()判断两个字符串内容是否相同,相同返回 true,否则返回 false
compareTo()根据 ASCII 码顺序依次比较两个字符串中的每个字符,字符串相等则返回0,大于返回正数,小于返回负数
contains()判断字符串是否包含某个字符串片段,包含返回 true ,反之为 false
contentEquals()判断两个对象是否相等,不仅可以判断 String 对象,还可以用于 StringBuffer、StringBuilder 与 String 对象值的判断,equals() 只能判断 String 对象是否相等
equalsIgnoreCase()判断两个字符串是否相等,忽略大小写
regionMatcher()判断某个区间内的字符串是否相等,相等返回 true,反之为 false
startsWith()字符串以指定字符开始则返回 true ,否则为 false
endsWith()字符串以指定字符结尾则返回 true ,否则为 false
indexOf(),lastIndexOf()从头部或者尾部开始检索指定字符串,找到则返回下标,否则返回 -1
subString()(subSequence())从指定位置返回新的字符串,返回的字符串不包含终点处下标的字符
concat()连接两个字符串
replace()替换 String 对象内的指定字符
toLowerCase(),toUpperCase()返回一个新的全大写或全小写字符串
trim()去除字符串前后两端的空格
valueOf()将 Object 、char 数组、int、double、long、float、boolean 类型的对象转换成 String 对象
intern()判断字符串是否在常量池,存在则返回字符串在常量池中的引用,不存在则先将字符串添加至常量池再返回引用(String a = “abc” 为在常量池中创建对象,new String()、new StringBuilder()、new StringBuffer() 在堆中创建对象)

本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。

若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BaymaxCS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值