Java学习笔记—String的用法

来源:互联网 发布:matlab模块化编程 编辑:程序博客网 时间:2024/06/06 05:04

1.String类重写了equals方法

String中重写了基类Object的equals方法,以下为JDK源码

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;    }//重写的equals方法会比较两个字符串是否相等

2.如何理解String类的“不可变”

先看以下代码:

public class Test{    public static void main(String[] args)    {        String str="before";        System.out.println(str);//输出before        str="after";        System.out.println(str);//输出after    }}

大家可能看完以上代码就疑惑了,str变量变化了呀!为什么说是“不可变”的呢?

我们观察到String类的源代码有以下一段:private final char value[];

其实String类的底层就是存储了一个字符数组,这个字符数组的“地址”是不可变的,并且String类对外不提供对这个字符数组进行修改的方法,因此String类的“不可变”指的是String对象指向的字符数组(上例中的“before”和“after”)不可变。

但是可以将String对象指向新的字符数组,上例中,str变量一开始指向的是“before”,后面重新指向了“after”

原创粉丝点击