String类的常见面试题
注:基本数据类型比较的是值,引用数据类型比较的是地址值
1.判断定义为String类型的s1和s2是否相等
1 private static void demo1() { 2 //常量池中没有这个字符串对象,就创建一个,如果有直接用即可 3 String s1 = "abc"; 4 String s2 = "abc"; 5 System.out.println(s1 == s2); //true 6 System.out.println(s1.equals(s2)); //true 7 }
2.下面这句话在内存中创建了几个对象?
1 private static void demo2() { 2 //创建几个对象 3 //创建两个对象,一个在常量池中,一个在堆内存中 4 String s1 = new String("abc"); 5 System.out.println(s1); 6 }
3.判断定义为String类型的s1和s2是否相等
private static void demo3() { 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是否相等
1 private static void demo4() { 2 //byte b = 3 + 4; 3 //在编译时就变成7,把7赋值给b,常量优化机制 4 String s1 = "a" + "b" + "c"; 5 String s2 = "abc"; 6 System.out.println(s1 == s2); //true,java中有常量优化机制 7 System.out.println(s1.equals(s2)); //true 8 }
5.判断定义为String类型的s1和s2是否相等
public static void main(Sting[] args) { String s1 = "ab"; String s2 = "abc"; String s3 = s1 + "c"; System.out.println(s3 == s2); //他这里的从堆里的abc与常量池里的abc比较 System.out.println(s3.equals(s2)); //true } }
String的判断功能
1,boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
2,boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
1 private static void demo1() { 2 String s1 = "heima"; 3 String s2 = "heima"; 4 String s3 = "HeiMa"; 5 6 System.out.println(s1.equals(s2)); //true 7 System.out.println(s2.equals(s3)); //false 8 9 System.out.println("---------------"); 10 11 System.out.println(s1.equalsIgnoreCase(s2)); 12 System.out.println(s1.equalsIgnoreCase(s3)); //不区分大小写 13 }
3,boolean contains(String str):判断大字符串中是否包含小字符串
4,boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
5,boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
1 private static void demo2() { 2 String s1 = "我爱heima,哈哈"; 3 String s2 = "heima"; 4 String s3 = "baima"; 5 String s4 = "我爱"; 6 String s5 = "哈哈"; 7 8 System.out.println(s1.contains(s2)); //判断是否包含传入的字符串 9 System.out.println(s1.contains(s3)); 10 11 System.out.println("------------------"); 12 System.out.println(s1.startsWith(s4)); //判断是否以传入的字符串开头 13 System.out.println(s1.startsWith(s5)); 14 15 System.out.println("------------------"); 16 System.out.println(s1.endsWith(s4)); //判断是否以传入的字符串结尾 17 System.out.println(s1.endsWith(s5)); 18 }
5,boolean isEmpty():判断字符串是否为空。
1 public static void main(String[] args) { 2 String s1 = "heima"; 3 String s2 = ""; 4 String s3 = null; 5 6 System.out.println(s1.isEmpty()); 7 System.out.println(s2.isEmpty()); 8 System.out.println(s3.isEmpty()); //java.lang.NullPointerException 9 }
""空串和null的区别
1,""空串是字符串常量,同时也是一个String类的对象,
既然是对象当然可以调用String类中的方法
2,null是空常量,不能调用任何的方法,否则会出现空指针异常,
null常量可以给任意的引用数据类型赋值
注:常量有字符串常量,字符常量,null常量,整数常量,小数常量和布尔常量6种