Java中字符串之String详解

1,什么是Java中的字符串
     在程序开发中字符串无处不在,如用户登录时输入的用户名,密码等使用的就是字符串.在Java中,字符串被作为String类型的对象处理,String类位于Java.lang包中,在默认情况下,该包被自动导入所有的程序.

2,创建String对象的方法

String s1="linovy927"; //创建一个字符创对象,名为s1
String s2=new String(); //创建一个空字符串对象,名为s2
String s3=new String("linovy927"); //创建一个字符串对象linovy927,名为s3

3,java中字符串的不变性
     String对象创建后就不能被改变,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同

public class HelloWorld {
    public static void main(String[] args) {
        String s1 = "linovy";
        String s2 = "linovy";
        String s3="I love "+s1;
        // 比较字符串s1和s2
        // linovy为常量字符串,多次出现时会被编译器优化,只创建一个对象
        System.out.println("s1和s2内存地址相同吗?" + (s1 == s2));
        //比较字符串s1和s3
        System.out.println("s1和s3内存地址相同吗?" +  (s1==s3));
        String s4 = "I love " + s1;
         //比较字符串s4和s3
        // s1是变量,s4在运行时才知道具体值,所以s3和s4是不同的对象
        System.out.println("s3和s4内存地址相同吗?" + (s4 == s3));
    }
}
最后运行结果如下:

s1和s3内存地址相同吗?true
s1和s3内存地址相同吗?false
s3和s4内存地址相同吗?false

4,String字符串不可变的原因
     1)在Java中字符串池(String pool)的需求,当初始化一个字符串变量时,如果字符串已经存在,就不会创建一个新的字符串变量,而是返回存在字符串的引用.例如:
  String s1 = "linovy";
  String s2 = "linovy";
这两行代码在堆中只会创建一个字符串对象.如果字符串是可变的,改变另一个字符串变量,就会使另一个字符串变量指向错误的值[1]
     2)缓存字符串hashcode码的需求,字符串的 hashcode是经常被使用的,字符串的不可变性确保了 hashcode的值一直是一样的,在需要 hashcode时,就不需要每次都计算,这样会高效很多.[1]
     3)出于安全性考虑,字符串经常作为网络连接,数据库连接等参数,不可变就可以保证连接的安全性.[1]

5,总结
     只要一个字符创在内存中(堆heap)被创建,就不能被改变.我们需要注意有关字符串的所有方法都不会改变字符串本身,而是会返回一个新的字符串对象.如果你需要可以被改变的字符串,可以使用StringBuffer或StringBuilder

参考文献
[1]Java中字符串的不可变性[CSDN 2015-01-07]
[2]图解String类型的不可变形及其原因[红黑联盟 2014-05-07]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值