A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张校云 黑马帝   /  2011-10-7 00:13  /  2747 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String a = "abc"与String b = "abc" 字符串对象a与b引用是一块内存地址吗?为什么 a==b运行结果是true  ?

6 个回复

倒序浏览
本帖最后由 宁超 于 2011-10-7 00:29 编辑

String   a   =   "abc "   当表达式执行的时候,会首先去内存中的字符串池中去找,看有没有ABC这个字符串,如果没有的话,就在字符串池中创建一个,当String   b   =   "abc "时,则a,b其实是指向了同一片内存地址空间。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为字符串是按照字符数组存放的,当你有一个字符串"abc"时这个字符串就被存放到了字符数组中,当你再一次创建"abc"时就会在内存中查找是否已经有了"abc",如果有的话就直接把已经有的"abc"的地址引用给你,如果没有就创建一个"abc".

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 赞一个!

查看全部评分

回复 使用道具 举报
String a是创建一个String类的对象引用变量a
String b是创建一个String类的对象引用变量b
在此题中变量a与变量b同时指向的都是栈中存放的同一个"abc"
所以引用地址就相同了就返回true了

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 赞一个!

查看全部评分

回复 使用道具 举报
变量a与变量b同时指向的都是栈中存放的同一个"abc"
也就是同一个位置
回复 使用道具 举报
a 和 b 指向的是同一块内存地址,所以返回为true。
回复 使用道具 举报
黄新灵 黑马帝 2011-10-7 10:31:18
7#
对,首先在内存中查找是否已经有了"abc",如果有的话就不会再次创建内存空间,而是直接把已经有的"abc"的内存地址直接返回,==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,所以这次你的==比较当然是true了。。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马