1.判断定义为String类型的s1和s2是否相等
* 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类型的s1和s2是否相等
* String s1 = "a" + "b" + "c";
* String s2 = "abc";
* System.out.println(s1 == s2); //true 地址值相同,都是常量,在常量池里面
* System.out.println(s1.equals(s2)); //true 地址值相同,默认同一个对象,值当然也是相等的。
5.判断定义为String类型的s1和s2是否相等
* 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 比较两个对象的值相等。