社区
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---为什么?
...全文
608
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写文章
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
IO流精讲下
字符串
内存操作流 StringReader StringWriter l 打印流(PrintStream 和 PrintWriter) l 标准输入输出流(System.in 和 System.out) l 随机访问流(RandomAccessFile) l&...
java
字符串
等于_
Java
字符串
字符串
顾名思义就是一些字符组合在一起组成的一串数据,称作
字符串
,在
Java
中
字符串
用双引号包围起来,格式为String string = “hello world”; 这里的hello world就是一个
字符串
,
字符串
里面可以包含任何的字符内容...
Java
8 String内存优化之
字符串
常量池
Java
8 String内存优化之
字符串
常量池前言环境实验思路实验1和实验2-
字符串
内存无大小限制实验1-存放近1G的
字符串
内存实验2-存放近1G的
字符串
内存-存入
字符串
常量池实验3和实验4-
字符串
常量池会复用内存实验3实验4...
java
String
字符串
的
内存地址
public class Main { public static void main(String args[]) { String s1 = "Runoob"; // String 直接创建 String s2 = "Runoob"; // String 直接创建 String s3 = s1; // 相同引用 ...
Java
字符串
(超超超详细)
目录 前言 字符 Character类 转义字符
字符串
...String类
字符串
...获取
字符串
的长度 ...
Java
提供了
Java
.lang.String类来对
字符串
进行这一系列的操作,以及StringBuffer类 字符 字符是用单引号括
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章