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---为什么?
String ss2="abc";
System.out.println(ss1==ss2);//true
ss1=ss1+"def";
ss2="abc"+"def";
System.out.println(ss1==ss2);//false---为什么?
解决方案 »
- 关于Java对象初始化,“构造方法的参数”和“实例成员及实例初始化模块”哪个先初始化
- 怎么用AWT或SWING实现google搜索框功能
- ArrayList类中removeRange()方法的使用问题
- 安卓快播QVOD协议讨论,再开一帖讨论.来者有分
- eclipse+ant的问题
- 求大神指导 本人写的一个小程序 出了点问题 找不到原因
- Properties类的中文问题,请高手回答,高分送上
- 大家来帮忙改改,cookie问题
- 通过HTML向Applet传递数组参数如<PARAM NAME=xline VALUE="0,20,40,60,80">,在Applet中接收该拿什么函数转换?
- 单列模式之静态内部类
- 做java开发,需要用到哪些技术
- 新人学JAVA,求达人指点!!
什么样的编译期就能确定呢?
那就是由常量来初始化的字符串ss1=ss1+"def";
右侧有变量,所以编译期不能确定不过再次强调,不需要研究和专这种问题
java 对此的实现有过改变,难保以后不改
搞清楚这个问题没有任何意义
==和equal不要用错了
刚开始ss1已经存在abc了
当你在创建一个引用的时候 首先他回去找在静态代码区域里面有没有此常量。
如果有,相同的,就指向相同的内存地址。
2、第二次由于内存地址改变了,所以等于false
“==” 是比较栈内存地址是否一样