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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Changer_s 中级黑马   /  2013-6-2 20:28  /  1288 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Changer_s 于 2013-6-3 20:22 编辑

以前算是模糊的理解:为所谓的内存什么的,好像完全错了,求解释
字节码的比较比较的又是什么呢?比的是内存地址么?这想法完全不对呀!
为什么String a = "asd"与String b= new String(“asd”)的内存地址竟然是相等的,求解决!

不要只是简单的说概念,也说说你的理解,以及它的应用!谢谢

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

正序浏览
火之意志 发表于 2013-6-2 23:20
字符串对象时存在于方法区中的常量池的,他的特点是唯一性,即常量池中的字符串都是唯一的,不重复飞,当一 ...

享元模式?flyweight?
回复 使用道具 举报
字符串对象时存在于方法区中的常量池的,他的特点是唯一性,即常量池中的字符串都是唯一的,不重复飞,当一字符串存在了,如“java”,当再有语句要创建“java”的字符串对象时,就会把以后的字符串对象“java”的地址指向这个对象引用,不会重复创建,所以他们在内存中是同一个对象,所以地址相同,对于字符串这种在常量池中存在的数据,当它发现数据已经存在时,就不会再单独开辟空间了,而是把对象指向它就行了。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
对于String a = "asd"与String b= new String(“asd”)内存地址相等的问题,我是这样理解的,不知道对不对,仅作参考。
String a = "asd"是初始化了一个字符串对象,字符串一旦初始化就不可以被改变。
然后new String(“asd”)是新建了一个字符串对象,对于字符串这种在常量池中存在的数据,当它发现数据已经存在时,就不会再单独开辟空间了,而是把对象指向它就行了。
String b= new String(“asd”),我理解为是地址的赋值操作,可能说的不准确,就是让b和new String的引用指向同一个对象。
这样的话,相当于它们都指向了“asd”所以内存地址值相等。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
字节码就是二进制数据,每个类都有自己独一无二的字节码,可所以以在反射中运用。至于你说的string a = “abc”  和string b = new string(abc);  内存地址是不等的,可以用== 验证

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

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