Java 面向对象(八)

时间:2019-07-24 17:44:13   收藏:0   阅读:80

常用类之String

String字符串类

什么是字符串?就是把多个字符,串连一起。

String字符串的本质

其实是一个char[]数组

/**该值用于字符存储。*/
private final char value [];

技术分享图片

String字符串分类

(1)不可变字符串:String :定义好之后,就不能再去改变了(内存地址不可变,一旦修改了,就会创建一个新的内存地址)

(2)可变字符串:StringBuilder/StringBuffer :定义好之后,还可以进行修改, 改变时,不会创建新的内存地址。

String, StringBuffer, StringBuilder 都实现了 CharSequence 接口。

String字符串创建

(1)直接赋值:String str = "myxq";

(2)通过构造器来创建:String str2 = new String("myxq");

两种创建的区别

方法区当中有一个常量池,存放常量。

(1)String str = "ABCD";

(2)String str2 = new String("ABCD");

技术分享图片

String字符串对象值为空

(1)表示引用为空:String str = null; 还没有初始化,没有分配内存空间。(地址为空)

(2)表示空字符串:String str = ""; 已经创建了对象,已经分配了内存。(内容为空)

String字符串比较

比较两个字符串相不相等。

(1) == :比较两个内存地址是否相等。

(2)使用equals :它是object的方法。在object中和 == 相同,都是比较两个内存地址是否相等。

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

建议子类,自己去覆盖此方法,自己在内部当中去根据自己的需求来去判断两个值是否相等。

String 已经覆盖了 equals:

public boolean equals(Object anObject) {

    // 1.判断传入的值是否与当前字符串地址相同,如果相同就直接返回true
    if (this == anObject) {
        return true;
    }
    
    // 2.如果不相等,再去判断传入的字符串是否为String类型。如果不,直接返回false
    if (anObject instanceof String) {
    
        // 是String,逐个判断每一个字符相不相等,如果全部相等返回true  
        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;
}

实例:

public static void main(String[] args) {
    // 在内存当中不能再去修改了,修改,就会创建新的地址
    String str = "ABC";

    String str2 = new String("ABC");

    // 比的是对象的地址
    if (str == str2) {
        System.out.println("地址相等");
    } else {
        System.out.println("地址不相等");
    }

    // 因为String 覆盖了equals,比的是对象的内容
    if (str.equals(str2)) {
        System.out.println("内容相等");
    } else {
        System.out.println("内容不相等");
    }
}

/* 输出结果:
 * 地址不相等
 * 内容相等
 */

原文:https://www.cnblogs.com/xzh0717/p/11239511.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!