黑马程序员技术交流社区

标题: Java语言中String字符串对象的注意事项 [打印本页]

作者: 往事~随风    时间: 2018-4-2 22:18
标题: Java语言中String字符串对象的注意事项
1.判断定义为String类型的s1和s2是否相等
       String s1 = "abc";
       String s2 = "abc";
       System.out.println(s1 == s2);      
       System.out.println(s1.equals(s2));  
注意:==比较的是地址;equals方法比较的是内容.
字符串常量在空间中是存放在方法区的常量池里面的
是为了方便字符串的重复使用.所以"abc"  的地址赋值给
s1和s2所以s1==s2,内容更是相等,所以都为true;
2.下面这句话在内存中创建了几个对象?
       String s1 = new String("abc");  
创建 两个,在堆内存创立String对象空间,在方法区开辟abc""空间  
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
s1存的是在堆内存开辟空间的地址值,该空间的内容指向方法区的"abc"的地址
"abc"是在方法区开辟的字符串对象,也有一个地址值
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
     java中有常量优化机制 ,和byte b = 3 + 4; 一样的效果
    "a","b","c"在方法区自动拼接成"abc"
5.判断定义为String类型的s1和s2是否相等
      String s1 = "ab";
      String s2 = "abc";
      String s3 = s1 + "c";
      System.out.println(s3 == s2); false
      System.out.println(s3.equals(s2)); ?  true
  s3这是在堆内存创建StringBuffer或StringBuilder对象,
  将字符串用append方法拼接起来,在通过toString方法转成字符串。

作者: 小浙姐姐    时间: 2018-4-6 14:45





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