首页 > 代码库 > 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