Java基础-String类

前言

String类可以说是Java基础中非常重要的一个知识点了,为避免以后百度,记录一下。

基本使用

1、把字符串封装成对象。

String a = new String("hello");

2、将字符数组封装成对象。

char[] chars = {'h','e','l','l','o'};
String chars_1 = new String(chars);

3、将字节数组中指定位置的值封装成对象。

char[] chars = {'h','e','l','l','o'};
String chars = new String(chars,1,3);

4、直接使用=号赋值,也是最为简单的一种。

String a = "hello";

常量池

因为String太过常用,JAVA类库的设计者在设计String类时做了个小小的变化,即采用了享元模式,每当生成一个新内容的字符串时,他们都被添加到一个共享池中,当第二次再次生成同样内容的字符串实例时,就共享此对象,而不是创建一个新对象,但是这样的做法仅仅适合于通过=符号进行的初始化。这个所谓的共享池指的就是JVM中方法区中的字符串常量池。

在Java程序启动时,JVM会读取磁盘中的Java源文件,将源文件中的内容读取到方法区的常量池中并创建class文件。String在创建对象时分为两种,使用new创建时是对象里存放的是堆内存中的地址,而地址指向常量池中的常量。使用=号创建时,对象里直接存放的是常量池中的字符串常量,所以s1s2是false,s2s3是true。

而s1.equals(s2)为true是为什么呢?大家都知道,所有的类都默认继承Object类,而Object类中的equals方法是比较内存地址,但是String类重写了equals()方法,用来比较内容的,即使是不同地址,只要内容一致,也会返回true,这也就是为什么a.equals©返回true的原因了。

Object类中的equals方法

public boolean equals(Object obj) {
    return (this == obj);
}

String类中的equals方法

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

String的判断功能

public static void main(String[] args) throws Exception {
    String a1 = "hello";
    boolean startsWith = a1.startsWith("h");	//判断字符串是否以指定的方式开头
    boolean endWith = a1.endsWith("l");			//判断字符串是否以指定的方式结尾
    System.out.println(startsWith);	
    System.out.println(endWith);
}

String的获取功能

public static void main(String[] args) throws Exception {
    String a = "hello";

    //获取字符串长度
    int length = a.length();

    //获取指定位置的字符
    char charAt = a.charAt(1);

    //获取指定字符在字符串中第一次出现的位置
    int indexOf = a.indexOf("l");

    //从指定位置开始截取字符串
    String substr = a.substring(2);

    //从指定位置开始,到指定位置结束(包括开始位置,不包括结束位置。也就是说截取到结束位置的前一位)
    String substr_end = a.substring(1,3);

    String b = "hello-he-hel";
    //根据指定字符拆分成数组
    String[] substr_split = b.split("-");	

    for(String a1 : substr_split) {
        System.out.println(a1);
    }
}

String的转换功能

public static void main(String[] args) throws Exception {
    String a = "HElLo";

    //字符串转换为字符数组
    char[] chars = a.toCharArray();

    //转换为大写 (hello)
    String a_Lower = a.toLowerCase();

    //转换为小写 (HELLO)
    String a_upper = a.toUpperCase();

}

文尾

文章均为学习阶段记录笔记,若有不妥请留言指正。谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值