黑马程序员技术交流社区

标题: String类的常见面试题 [打印本页]

作者: Kingchen    时间: 2016-6-2 21:50
标题: String类的常见面试题
* 1.判断定义为String类型的s1和s2是否相等
        * String s1 = "abc";
        * String s2 = "abc";
        * System.out.println(s1 == s2);                                        
        * System.out.println(s1.equals(s2));                
* 2.下面这句话在内存中创建了几个对象?
        * String s1 = new String("abc");                       
* 3.判断定义为String类型的s1和s2是否相等
        * String s1 = new String("abc");                       
        * String s2 = "abc";
        * System.out.println(s1 == s2);               
        * System.out.println(s1.equals(s2));
* 4.判断定义为String类型的s1和s2是否相等   
        * String s1 = "a" + "b" + "c";
        * String s2 = "abc";
        * System.out.println(s1 == s2);               
        * System.out.println(s1.equals(s2));
* 5.判断定义为String类型的s1和s2是否相等
        * String s1 = "ab";
        * String s2 = "abc";
        * String s3 = s1 + "c";
        * System.out.println(s3 == s2);
        * System.out.println(s3.equals(s2));
案例:
  1. package com.itheima.string;
  2. public class Demo_String {       
  3.         public static void main(String[] args) {
  4.                 //demo1();
  5.                 //demo2();
  6.                 //demo3();
  7.                 //demo4();
  8.                 demo5();
  9.         }
  10.         private static void demo5() {
  11.                 String s1 = "ab";
  12.                 String s2 = "abc";
  13.                 String s3 = s1 + "c";
  14.                 System.out.println(s3 == s2);
  15.                 System.out.println(s3.equals(s2));                 //true
  16.         }
  17.         private static void demo4() {
  18.                 //byte b = 3 + 4;                                                //在编译时就变成7,把7赋值给b,常量优化机制
  19.                 String s1 = "a" + "b" + "c";//java中有常量优化机制,在编译时期就能确定s2的值为"abc",所以编译时期,在常量池中创建"abc"
  20.                 String s2 = "abc";//执行到这里时常量池中已经有了"abc",所以就不再创建,所以s1和s2指向的是常量池中同一个字符串常量"abc"
  21.                 System.out.println(s1 == s2);                         //true,java中有常量优化机制       
  22.                 System.out.println(s1.equals(s2));                 //true
  23.         }
  24.         private static void demo3() {//==比较的是地址值
  25.                 String s1 = new String("abc");                        //录的是堆内存对象的地址值               
  26.                 String s2 = "abc";                                                //记录的是常量池中的地址值
  27.                 System.out.println(s1 == s2);                         //false
  28.                 System.out.println(s1.equals(s2));                 //true
  29.         }
  30.         private static void demo2() {
  31.                 //创建几个对象
  32.                 //创建两个对象,一个在常量池中,一个在堆内存中
  33.                 String s1 = new String("abc");               
  34.                 System.out.println(s1);
  35.         }
  36.         private static void demo1() {                                //常量池中没有这个字符串对象,就创建一个,如果有直接用即可
  37.                 String s1 = "abc";
  38.                 String s2 = "abc";
  39.                 System.out.println(s1 == s2);                         //==号比较的是地址值,true       
  40.                 System.out.println(s1.equals(s2));                 //比较的是字符串的内容:true
  41.         }
  42. }
复制代码








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2