/*有关字符串类型的一些使用机制
比较常用的字符串使用方式跟平常的差不多,比如
String in="abc";
打印出来的直接会是一个字符串 abc
还有其他几种不常"见"的String类型的使用方式
1.String in=new String();
直接创建一个空白的字符串的数组,输出的结果是一个空值
2.char[] in={'a','b','c'}; String sc=new String(in);
先创建一个字节类型的数组,之后用这个字节类型的数组进行直接的输入
3.String in=new String("abc");
直接在其中输入对应的数组,结果跟数组内部的是完全一样的
进入面试题的示例看看两种不同类的String方式有什么不同
*/ String s1="abc"; String s2="abc"; System.out.println(s1==s2); //答案是 true /*
解释说明
在用平常最常用的String类型的方法的时候,一般会直接进入到堆内存当中的Stringtable当中,如果没有,
那就进行创建,有的话直接用
*/
String a1="abc"; String a2=new String("abc"); System.out.println(a1==a2); //答案是 false /*
一看到NEW的时候,就要在堆内存当中创建一个新的地址,所以a2直接创建了一个新的地址,之后在Stringtable
当中进行寻找,有的话直接作为一个副本复制过来,两者之间的地址值是不一样的,所以FALSE
*/
String b1="abc"; String b2="bc"; String b3=b2+"a"; System.out.println(b3==b1); //答案是 false /*
对于前两个的变量不再过多的说明.没有的话直接在Stringtable当中进行创建
但是对于b3,是一个变量外加上一个字节类型的,所以要在堆内存当中重新的创建一个Stringbuilder
的类型,将两者之间,使用字符串的拼接方式连接在一起,也有考到+的使用方式
之后因为类型不匹配,所以需要把Stringbuild重新的转变成为一个String的类型,这样才能使用,这样
的才是一个最终的地址值
*/
String c1="abc"; String c2="a"+"bc"; System.out.println(c1==c2); //true /*
这个答案的结果需要跟上一个题目之间相互区分,也就是对于+的理解(字符串之间的),在JAVA当中,在进行一定的编译的时候,
会有一定的常量优化处理,在这个题目当中就是这样,会在编译的时候,直接把这两个连接在一起,最后的结果发现在Stringtable当中是存在的
,所以两个值完全相等!
*/
OVER