社区
Java SE
帖子详情
Java字符串内存地址
szy3121
2012-02-03 09:25:56
String ss1="a"+"bc";
String ss2="abc";
System.out.println(ss1==ss2);//true
ss1=ss1+"def";
ss2="abc"+"def";
System.out.println(ss1==ss2);//false---为什么?
...全文
623
11
打赏
收藏
Java字符串内存地址
String ss1="a"+"bc"; String ss2="abc"; System.out.println(ss1==ss2);//true ss1=ss1+"def"; ss2="abc"+"def"; System.out.println(ss1==ss2);//false---为什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhguo0o
2013-09-16
打赏
举报
回复
第一个好解释,都是放在栈里的同一内容!第二个,因为你用到了ss1=ss1+"def",所以这个时候的ss1已经被先转换为对象了,然后虚拟机会新建一个new String("def");然后在和ss1相加,结果也是一个字符串对象,这个时候ss1已经放在堆里面了!而ss2还只是一般的字符串相加自然还是放在栈里面,这个时候放的地方都不一样了,在用等号比较肯定是false了
笑一笑
2012-02-05
打赏
举报
回复
1、字符串是放在静态的代码区域,在类一开始被加载的时候此常量就被初始化放在这个区内,而且被全局所共享,所有的访问直接指向他即可。
刚开始ss1已经存在abc了
当你在创建一个引用的时候 首先他回去找在静态代码区域里面有没有此常量。
如果有,相同的,就指向相同的内存地址。
2、第二次由于内存地址改变了,所以等于false
“==” 是比较栈内存地址是否一样
diffmaker
2012-02-03
打赏
举报
回复
编译期能确定相同的字符串才会指向常量池中同一个字符串
学习
安心逍遥
2012-02-03
打赏
举报
回复
编译期能确定相同的字符串才会指向常量池中同一个字符串
panpan0430
2012-02-03
打赏
举报
回复
关键是要弄懂==的含义。
==和equal不要用错了
结贴是美德
2012-02-03
打赏
举报
回复
[Quote=引用 4 楼 sunyiz 的回复:]
编译期能确定相同的字符串才会指向常量池中同一个字符串
什么样的编译期就能确定呢?
那就是由常量来初始化的字符串
ss1=ss1+"def";
右侧有变量,所以编译期不能确定
不过再次强调,不需要研究和专这种问题
java 对此的实现有过改变,难保以后不改
搞清楚这个问题没有任何意义
[/Quote]
就怕面试问这样的问题。。
sunyiz
2012-02-03
打赏
举报
回复
编译期能确定相同的字符串才会指向常量池中同一个字符串
什么样的编译期就能确定呢?
那就是由常量来初始化的字符串
ss1=ss1+"def";
右侧有变量,所以编译期不能确定
不过再次强调,不需要研究和专这种问题
java 对此的实现有过改变,难保以后不改
搞清楚这个问题没有任何意义
MiceRice
2012-02-03
打赏
举报
回复
确实有点日经。
String的享元模式,在编译时能立即确定的常量,才能比较好的发挥效用。而且目前这个效果已经是编译器优化后的了;没记错的话,老早以前的Java,第一条也没法true。
ss1=ss1+"def"; 运行时才知道ss1的内容,编译器还没那么聪明可以推断出ss1到这里的时候能是个啥。
结贴是美德
2012-02-03
打赏
举报
回复
貌似是ss1=ss1+"def";这行等号右面有变量的缘故。。。
结贴是美德
2012-02-03
打赏
举报
回复
不懂啊 等待大牛日经
parjing
2012-02-03
打赏
举报
回复
java
六大必须理解的问题 文档
- **
字符串
的定义与引用**:在
Java
中,`String` 类是一种特殊的对象类型,用于表示文本
字符串
。例如 `String s = "Hello world!";` 这行代码创建了一个名为`s` 的变量,该变量指向一个包含“Hello world!”文本的`...
fastjson的jar包 绿色版
这个库支持JSON对象和
Java
对象之间的相互转换,包括JSON
字符串
到
Java
对象的反序列化,以及
Java
对象到JSON
字符串
的序列化。它还提供了解析JSON
字符串
和生成JSON
字符串
的方法,使得处理JSON数据变得简单易行。 其次,...
Gson 2.3.1
6. **流式API**: Gson 2.3.1中还包含流式API,可以处理大型JSON数据,避免一次性加载整个JSON
字符串
到内存中,提高了性能和资源效率。 7. **性能优化**: Gson库经过优化,性能表现良好。对于大规模数据处理,Gson...
jdk1.7 64位官方版 jdk-7u79-linux-x64.tar.gz
2. **
字符串
inswitch**:在
Java
7中,
字符串
可以被用作switch语句的case标签,增加了代码的可读性。 3. **尝试-with-resources**:这个新特性允许开发者在一个try语句块中声明并初始化资源,这些资源会在finally块...
java
字符串
常量的存储位置
那么“1234”这个
字符串
常量就存放在方法区中的
字符串
常量池某一位置,然后把这个
字符串
的地址返回给str public static void main(String[] args) { String str1 = "1234"; String str2 = "12"+"34"; System....
Java SE
62,635
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章