java String类常见面试题

 1.判断定义为String类型的s1s2是否相等

* String s1 = "abc";

* String s2 = "abc";

* System.out.println(s1 == s2);                 //true ,比较地址值,都在常量池,相等

* System.out.println(s1.equals(s2));             //true,equals中,先判断两个对象的地址值,地址值相同,默认就是同一个对象,不会继续equalse中的具体值是否相等的判断了,直接会返回true。

 2.下面这句话在内存中创建了几个对象?

* String s1 = new String("abc");                      //两个对象 :abc在常量池,有自己的地址。 new String 创建                                           对象,在编译期间不能确定具体的值,所以会在 在在内存中创建的一个地址。

 

3.判断定义为String类型的s1和s2是否相等

* String s1 = new String("abc");

* String s2 = "abc";

* System.out.println(s1 == s2); //false

* System.out.println(s1.equals(s2));    //true

 

4.判断定义为String类型的s1s2是否相等

* String s1 = "a" + "b" + "c";

* String s2 = "abc";

* System.out.println(s1 == s2);          //true         地址值相同,都是常量,在常量池里面        

* System.out.println(s1.equals(s2));                //true         地址值相同,默认同一个对象,值当然也是相等的。

 

5.判断定义为String类型的s1s2是否相等

* String s1 = "ab";

* String s2 = "abc";

* String s3 = s1 + "c";

* System.out.println(s3 == s2);               //false   不相等,s1是变量,编译的时候确定不了值,在内存中会创建值,s3在堆内存中,。s2在常量池,所以不相等。

* System.out.println(s3.equals(s2));      //true   比较两个对象的值相等。

猜你喜欢

转载自blog.csdn.net/chaobin6/article/details/81214980