DESKTOP-7O1P1F7_20200827-齐元朝

问题

String a=“adc”;

String a=“adcd”

这里的两对双引号代表的是两个完全不相干的String实例

引用变量a中的值由“adc”的“地址”变为“abcd”的“地址”,

那么,对于 a=a+“e”; 是怎么运行的呢?

猜测:既然字符串实例不可变,那么会有一个新的字符串实例产生,由之前的字符串实例“adcd”和后面的字符串实例“e”实例拼接的,然后将新串的地址赋值给a

public class Test1 {
    
    public static void main(String[] args) {
        String a="白龙马";
        System.out.println(System.identityHashCode(a));
        System.out.println(a.hashCode());
        
        a+="";
        System.out.println(System.identityHashCode(a));
        System.out.println(a.hashCode());
        
        byte[] b="白龙马".getBytes();
        System.out.println(Arrays.toString(b));
        
                
    }

}

程序运行结果:

604107971
30456112
1101288798
30456112
[-25, -103, -67, -23, -66, -103, -23, -87, -84]

由此可见,引用变量a中存储的“地址”先后两次发生了变化,指向了不同的String实例,所以有新的String实例生成。而且因为两个String实例的相同,所以String类中hashCode方法返回的结果是一致的

问题2

String类中的实例方法,可以通过String实例调用,所以应该可以用字符串调用String类的实例方法,不仅仅局限于用String类型的引用变量

问题1的代码实现了通过 “白龙马” 字符串调用了String类中的实例方法

吐槽

git有点晕,虽然参照视频弄好了,但没有视频再来一遍就什么都不知道了,先用起来,目前估计就用一个git pull 命令,先用着,估计笔试面试也不会考这玩意怎么用的,等以后再研究吧

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1