技术陷阱之二:字符串是引用类型,不是值类型
来源:互联网 发布:网络机房整改目的 编辑:程序博客网 时间:2024/06/07 15:13
java中的字符串是String类型,该类型直接继承Object对象。但String类型的某些特性会让人产生它属于值类型的错觉:
public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "这是第一个字符串"; String str2 = str1; //把str1的引用传递给str2 System.out.println(str1.equals(str2)); //两个字符串的引用指向同一个内存地址 str2 = "这个第二个字符串"; //试图使用引用str2修改str1指向的对象 System.out.println(str1.equals(str2)); //两个字符串的引用不指向同一内存地址 }}
由于字符串是引用类型,将str1的引用传递给str2之后,两个字符串变量指向同一内存地址,修改str2的内容之后,str1和str2也应该指向同一内存地址。但实际的运行结果是修改str2内容以后,两个字符串变量指向不同的内存地址
运行后的结果如下:
这样的结果会让人产生错觉,误以为String属于值类型。分析其原因,是由于String类创建的字符串对象的不可修改的特性所致。使用String对类创建字符串对象后,就不能再做修改,若修改,则会马上生成新的字符串对象。在上面代码中,将“这是第二个字符串”赋值给str2,实际上是初始化一个新的字符串对象并赋值给了引用str2,这就是出现上面运行结果的原因。
0 0
- 技术陷阱之二:字符串是引用类型,不是值类型
- 字符串、值类型引用类型
- 字符串是特殊的引用类型
- String是值类型,还是引用类型
- javascript之类型陷阱
- 包装类型作为参数时,是值传递,不是引用传递
- C# 引用类型-字符串类型
- C#之值类型与引用类型
- 【C#之值类型vs引用类型】
- c#之值类型和引用类型
- 类是引用类型
- 形式参数是引用类型的时候 返回值类型是引用类型的时候
- Javascript引用类型之Array类型(二)
- 值类型-引用类型
- 引用类型 值类型
- 值类型、引用类型
- 值类型-引用类型
- 值类型、引用类型
- 一款已上市MMO手游地图同步方案总结
- 高性能MySQL
- Android性能优化典范(三)
- 红黑树
- 用typedef来定义数组
- 技术陷阱之二:字符串是引用类型,不是值类型
- org.apache.commons.codec.binary.Base64 加密解密
- 2017中国十大富豪排行榜
- Python UnicodeDecodeError: 'gbk' codec can't decode byte 0xe9
- POJ 3654 Corn Fields 状态压缩
- 蓝桥杯Java练习——欧拉和鸡蛋
- 浅谈C++函数返回
- POJ 3259 Wormholes(SPFA 判负环)
- 华为OJ合法IP