码迷,mamicode.com
首页 > 编程语言 > 详细

Java中容易迷糊的String

时间:2017-03-29 20:11:19      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:ng2   size   stat   类型   equal   als   字符串常量   .net   返回   

1 "=="与"equals"
          "=="这种比较是针对两个String类型的变量的引用,也就是说如果两个String类型的变量, 它们所引用同一个String对象(即指向同一块内存堆),则"=="比较的结果是true。 用Object对象的equals()方法来比较,String对象继承自Object,并且对equals()方法进行了重写。
    两个String对象通过equals()方法来进行比较时,其实就是对String对象所封装的字符串内容进行比较, 也就是说如果两个String对象所封装的字符串内容相同(包括大小写相同),则equals()方法将返回true。  

2 String作为基础类型或者String对象

public class Str {
    public static void main(String[] args) {
        String a = "abc";
        String b = "abc";
        String c = new String("abc");
        String s1 = new String("abc");
        String s2 = new String("abc");
        String s3 = s2;
        System.out.println(a == b);        // true
        System.out.println(a.equals(b));      // true
        System.out.println(a == c);        // false
        System.out.println(a.equals(c));      // true
        System.out.println(s1 == s2);      // false
        System.out.println(s1.equals(s2));    // true
        System.out.println(s2 == s3);       // true
        System.out.println(s2.equals(s3));    //true
    }   
}

    String a = "abc", 可能创建一个或者不创建对象,如果"abc"这个字符串在java String池里不存在,会在java String池里创建一个创建一个String对象("abc"),然后str1指向这个内存地址,无论以后用这种方式创建多少个值为"abc"的字符串对象,始终只有一个内存地址被分配,之后的都是String的拷贝, Java中称为“字符串驻留”,所有的字符串常量都会在编译之后自动地驻留。把String作为一个基本类型来使用的,因此s1所引用的对象是属于String缓冲池内的。

  String c = new String("abc"),把String作为一个对象来使用的,因此s2所引用的对象不属于String缓冲池内的,即它是独立的。通过new关键字,虚拟机会为此创建一个新的String对象,即为它分配了一块新的内存堆。至少创建一个对象,也可能两个。因为用到new关键字,肯定会在heap中创建一个str2的String对象, 它的value是"abc"。同时如果这个字符串再java String池里不存在,会在java池里创建这个String对象"abc"。
  String s3 = s2;// 即把s2的引用赋值给了s3,所以s3所引用的对象其实就是s2所引用的对象。

String类型更多理解请访问http://blog.csdn.net/wangdong20/article/details/8566217

Java中容易迷糊的String

标签:ng2   size   stat   类型   equal   als   字符串常量   .net   返回   

原文地址:http://www.cnblogs.com/interfaceone/p/6641504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!