java中的String特殊之处

 

本文属本人原创,如要转载,请指明出处
http://blog.csdn.net/rypgood


java里面,String是最特殊的一个类。说它是基本类型,它又不是,说它不是基本类型,又和基本类型很

像,如果不搞清楚,很容易出现一些问题。下面我们来分析它的一些特点。
我们知道,String和int等基本类型一样,可以不用new关键字来对它进行赋值,如:
String s1="abc";
String s2="abc";
下面来了一个问题,问:由以上创建的s2和s2,s1==s2是true还是false?
可能你一不小心就答false了,但是经过你的测试,它是返回true的。
再一个问题:
String s1="abc";
String s2="abc";
以下表达式中得到的结果是什么?
1、s1+s2=="abcabc"
2、s1+"abc"=="abcabc"
3、s1=="ab"+"c";
4、"abc"+"abc"=="abcabc"
你可以自己测试一下,答案是:
1、false
2、false
3、true
4、true
这是为什么呢?
这就要从内存说起了。java的基本数据类型只在栈内存中操作,其中包括char。而String,我们知道,字

符串其实是由字符数组变换而来的,所以String实际上就是一组char串。为了使用的方便,java将String

设计成可以由栈内存中存储字符串对它进行赋值。由于栈内存中的内容是唯一的,所以当s2被赋成"abc"

时,并没有新创建一个字符串;两个无引用的字符串进行加法操作,它是在栈中进行的,即把它当作基本

数据类型来对待,所以第3和第4个表达式是true。但是两个字符串进行加法操作时,有一个为有引用的类

型时,它们的加法操作将被放到堆中进行。这就是为什么1和2两个表达式为false了。
(关于栈内存和堆内存的内容可以到网上查找,这里不再说明。)

另外还要注意的是,String是不可变的,就是说,对某个字符串进行任何操作都不能改变它的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值