1.判断定义为String类型的s1和s2是否相等
String s1="abc";
String s2="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
运行结果为
true
true
==比较基本数据类型的时候比较的是值,比较引用类型的时候比较的是地址值。这里是比较的引用类型。
创建“abc”的时候先到常量池看看有没有,没有的话就创建一个,有的话就直接用。所以s1和s2的存的地址值相同,指向的是同一个。
equals是Object中的方法,只能用于引用类型,也是比较的地址值。但String类重写了equals方法,来比较字符串是否相等。
2.这句话在内存创建了几个对象
String s1=new String("abc");
答案是两个
执行“abc”的之后在常量池创建一个,new的时候在堆里创建一个,并把常量池中的“abc”复制了一份过去。然后将其引用赋给了s1。
3.判断定义为String类型的s1和s2是否相等
String s1=new String("abc");//堆内存的地址
String s2="abc";//常量池的地址
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
运行结果为
false
true
4.判断定义为String类型的s1和s2是否相等
String s1="ab";
String s2="abc";
String s3=s1+"c";
System.out.println(s3==s2);
System.out.println(s3.equals(s2));
运行结果为
false
true
先通过StingBuffer将“ab”和“c”合并成“abc”,然后通过toString将其转换成字符串。
Java 语言提供对字符串串联符号(”+”)以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。