DESKTOP-EA11HIB_20200828-蒋宇飞

一、问题

1.疑问

        char[] data = { 'h' , 'e' , 'l' , 'l' , 'o' };
        for( int i = 0 ; i < data.length ; i++ ) {
            System.out.print( (int)data[i] + ",");
        }
        String x = new String( data );
    
        String s = new String( "hello" );
        
        String t = x.intern();
        
        System.out.println( s == t );//false
        System.out.println( s == x );//false 

第一次出现String实例 String s = "hello" ; 将存储在字符串池中,第二次出现String实例 String s = new String( "hello" ); 将存储在堆中,若第二次出现String实例 String x = "hello" ; 将检查"hello"对应的String实例是否存在于 【字符串池】 中,如果"hello"对应的String实例存在于【字符串池】 中,则直接返回【字符串池】 中该实例的地址,否则就将创建"hello"对应的String实例并将其存入到【字符串池】 中,随后返回该实例的地址。

而第一次出现String实例 String s = new String( "hello" ); 在上面代码中说明 String s = new String( "hello" ); 中的"hello"没有存储在字符串池中,而是存储在堆中,我记得老师在用网上的buge代码测试时说第一次出现String s = new String( "hello" );时,"hello"存储在字符串池中,这是否说明了new String(...)形式创建 String实例存储于堆空间中,而与是否是第一次或第二次出现无关。

二、感想

细节方面要注意的地方很多,感觉自己学的还很欠缺,时间都不够用了。

标签

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