首页 > 代码库 > java之面试String
java之面试String
1 new String()与直接赋值的区别?
String s1=new String("abc");
String s2="abc";
System.out.println(s1==s2); //false
详解: 上面两行代码分别会存在内存中三块存储区中,分别是栈,堆,方法区 ,字符串只会创建一次,第一次创建完,后面再用到相同字符串时只会去方法区中找,有则直接用,没有再创建
栈: s1 0x001 s2 ox002 "方法区中的abc"
堆 :new string( )
方法区: “abc”
2 两个相同字符串变量区别?
String s1="abc";
String s2="abc";
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
详解:上面两行代码分别会存到栈和方法区两块存储区,"abc"只会在方法区中存储一次,下次再用到abc字符串时它会先去方
法区中找,有则直接地址值拿过来用,没用则重新创建
栈:s1 0x001
s2 0x001
方法区:ox001 abc
3 两个new String()区别 ?
String s1=new String( "hello");
String s2=new String("hello");
System.out.println(s1==s2); //false
System.out.println(s1.equals(s2)); //true
详解:上面两行代码分别会存到栈,堆,方法区三块存储区中,即地址值不同,但内容地址值相同
栈:S1 0X001
S2 0x002
堆: new String() 0x001 ---------ox00000
new String( ) 0x002 ----------ox00000
方法区: hello 0x00000
4 String str="helo";
str+="world";
System.out.println(str); //hello world
详解:字符串一旦被初始化就不能被改变,这里共创建三个string对象
上面两句代码共用到两个内存存储区:栈和方法区,每个字符串只在方法区中存放一次,其它运用它时直接去里面找,
有则直接用,没有就重新创建新的
栈:str--------ox003
方法区: hello ox001
world 0x002
helo world 0x003