String的特别之处1

【西口西】在Java中,感觉String是个很特别的存在,下面我来稍微总结一下,欢迎吐槽~


两种实例化方法的区别

String作为一个基本数据类型,实例化的时候可以直接赋值

String s1=”blahblah”;

当然也可以调用String类的构造方法,通过new赋值

String s2=new String(“blahblah”);

这两种方式有何区别呢?

首先“blahblah”一经声明,本身就是一个String类的匿名对象,在堆内存中开辟了空间,就算“blahblah”这个字符串没有名字,它也可以直接调用String类中的方法。

  • 使用直接赋值的方式,在对多个字符串进行赋值时,如果字符串内容相同,则不同的字符串名字指向的都是同一个堆内存地址,如:

    String s1=”blahblah”;
    String s2=”blahblah”;

    对s1s2进行比较,使用==和equals,结果都是true。(String中==比较地址,equals比较内容)
    因为此时s1,s2实际上指向的是同一堆内存地址中的”blahblah”。

  • 但如果使用构造方法对多个字符串进行赋值,不管内容是否相同,每次new一个对象都会开辟一个新的堆内存

    String s1=new String(“blahblah”);
    String s2=new String(“blahblah”);

    再对s1s2进行比较,使用==时结果是false,使用equals时结果为true。
    此时的s1,s2虽然内容相同,指向的却不是同一个堆内存地址了。

由此可见,使用直接赋值的方法可以减少空间的冗余度。

猜你喜欢

转载自myalicedream.iteye.com/blog/2198131
今日推荐