Android(java)学习笔记37:String类型的面试题

1. String类型面试题:

 1 package cn.itcast_02;
 2 
 3 /*
 4  * String s = new String(“hello”)和String s = “hello”;的区别?
 5  * 有。前者会创建2个对象,后者创建1个对象。
 6  * 
 7  * ==:比较引用类型比较的是地址值是否相同
 8  * equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。
 9  */
10 public class StringDemo2 {
11     public static void main(String[] args) {
12         String s1 = new String("hello");
13         String s2 = "hello";
14 
15         System.out.println(s1 == s2);// false
16         System.out.println(s1.equals(s2));// true
17     }
18 }


"hello" 这个字符串属于在字符串常量区的对象

过程图:

 

 下面看程序,结果:

package cn.itcast_02;

/*
 * 看程序写结果
 */
public class StringDemo3 {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1 == s2);// false
        System.out.println(s1.equals(s2));// true

        String s3 = new String("hello");
        String s4 = "hello";
        System.out.println(s3 == s4);// false
        System.out.println(s3.equals(s4));// true

        String s5 = "hello";
        String s6 = "hello";
        System.out.println(s5 == s6);// true
        System.out.println(s5.equals(s6));// true
    }
}

 测试类:

 1 package cn.itcast_02;
 2 
 3 /*
 4  * 看程序写结果
 5  * 字符串如果是变量相加,先开空间,在拼接。
 6  * 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
 7  */
 8 public class StringDemo4 {
 9     public static void main(String[] args) {
10         String s1 = "hello";
11         String s2 = "world";
12         String s3 = "helloworld";
13         System.out.println(s3 == s1 + s2);// false
14         System.out.println(s3.equals((s1 + s2)));// true
15 
16         System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true
17         System.out.println(s3.equals("hello" + "world"));// true
18 
19         // 通过反编译看源码,我们知道这里已经做好了处理。
20         // System.out.println(s3 == "helloworld");
21         // System.out.println(s3.equals("helloworld"));
22     }
23 }

 

原文地址:https://www.cnblogs.com/hebao0514/p/4547792.html