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实例存储于堆空间中,而与是否是第一次或第二次出现无关。
二、感想
细节方面要注意的地方很多,感觉自己学的还很欠缺,时间都不够用了。
点赞