Java字符串_String

来源:互联网 发布:网络运营培训课程 编辑:程序博客网 时间:2024/06/05 04:45

首先看JDK的源码:

public final class String    implements java.io.Serializable, Comparable<String>, CharSequence {    /** The value is used for character storage. */    private final char value[];
我们可以知道:

(1)String是一个类;
(2)不可以继承;
(3)实现了3个接口;
(4)用value[]数组存放字符
(5)final修饰了value[],所以是不可变的字符序列。

短短几行代码,把该告诉我们的都告诉了,还是开源好呀,不用再去记忆各式各样的用法了,不明白,打开源码看看,一切就清楚了。

源码中详细了说明了各个函数的实现和目标,String的各个函数的用法就没啥必要学了,用的时候,现看先用,发现没有的方法,自己写一个就ok了。

再看一个例子:

package com.ws.array;public class teststring {public static void main(String[] args) {String str1 = new String("中国");String str2 = new String("中国");System.out.println(str2.equals(str1));System.out.println(str2==str1);String str3 = "中国";String str4 = "中国";System.out.println(str4.equals(str3));System.out.println(str4==str3);}}
输出:

truefalsetruetrue

第一个输出是说str1和str2的内容是否相同,都是中国,所以相同,true;
第二个输出是说str1和str2是不是一个对象,当然不是,所以false;
第三个输出是说str3和str4的内容是否相同,都是中国,所以相同,true;
第四个输出是说str3和str4是不是一个对象,字符串会自动创建一个对象,这两个变量都指向这个对象,一个地址,是一个对象,true。

语言描述不清楚,画个图:


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;    }
代码,描述的很清楚,如果两个字符串是一个对象,返回true,如果不是,一个字符一个字符的比较,相同返回true,有一个不同,返回false。

多看源码,了解原理就好了,用的时候查一查,不要浪费脑细胞,方法万万千千,会用就ok。

0 0