java-String类的常见面试题
package com.day7.one;
public class DemoString {
/**
* @param args
*/
public static void main(String[] args) {
demo1();
demo2();
demo3();
demo4();
demo5();
}
private static void demo1() {
String s1="abc"; //在常量池中创建了abc字符串
String s2="abc";
System.out.println(s1==s2); //s1和s2指向的是同一个地址(true)
System.out.println(s1.equals(s2)); //将此字符串与指定的对象比较。当且仅当该参数不为 null,
//并且是与此对象表示相同字符序列的 String 对象时,结果才为 (true)。
}
private static void demo2() {
String s3=new String("abc"); //创建了两个对象,一个在常量池中,副本在堆内存中
}
private static void demo3() {
String s4=new String("abc");
String s5="abc";
System.out.println(s4==s5); //false,因为s4指向的是堆中abc的地址值,s5指向的是常量池中的地址值
System.out.println(s4.equals(s5)); //true,字符序列相同就行
}
private static void demo4() {
String s6="a"+"b"+"c";
String s7="abc";
System.out.println(s6==s7); //true,java中有常量优化机制
System.out.println(s6.equals(s7)); //true,因为s7直接指向已有的"abc"字符串地址
}
private static void demo5() {
String s8="ab";
String s9="abc";
String s10=s8+"c"; //s10是指向对内存中的地址
System.out.println(s8==s9); //false,
System.out.println(s9.equals(s10)); //true,
}
}