String字面值对象和构造方法创建对象的区别的两个有关==和equals的面试题。

来源:互联网 发布:王者荣耀刘备攻略知乎 编辑:程序博客网 时间:2024/06/06 05:58
01package 常见对象_String;
02 
03public class StringDemo4 {
04    public static void main(String[] args) {
05        String s1 = new String("hello");
06        String s2 = new String("hello");
07        System.out.println(s1==s2);//false
08        System.out.println(s1.equals(s2));//true
09         
10        String s3 = new String("hello");
11        String s4 = "hello";//在方法区有这个常量值
12        System.out.println(s3==s4);//false
13        System.out.println(s3.equals(s4));//true
14         
15        String s5 = "hello";
16        String s6 = "hello";
17        System.out.println(s5==s6);//true
18        System.out.println(s5.equals(s6));//true
19    }
20 
21}

面试题2:

view source
print?
01package 常见对象_String;
02 
03public class StringDemo5 {
04    public static void main(String[] args) {
05        String s1  = "hello";
06        String s2 = "world";
07        String s3 = "helloworld";
08        System.out.println(s3==s1+s2);//false(s1和s2是两个变量是先开空间再拼接在一起,所以不和s3地址值一直)
09        System.out.println(s3.equals(s1+s2));//true
10        System.out.println(s3=="hello"+"world");//true(因为"hello"和"world"是常量,所以先拼接再去找有没有这个拼接后的常量,发现有,s3所以相等)
11        System.out.println(s3.equals("hello"+"world"));//true
12     
13        //通过反编译看源码,我们知道这里已经做好了处理
14//      System.out.println(s3=="helloworld");
15//      System.out.println(s3.equals("helloworld"));
16    }
17 
18}

/*
 * 结论:
 * 字符串如果是变量相加,先开空间再拼接(一开空间,地址就绝对不一样)
 * 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则就创建

 我们用Java的反编译工具XJad就可以看出来其中的原因

*/

(window).load(function (){ 
                                    var imgs =
("#articleCon img"); for(var i = 0 ; i
阅读全文
0 0