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---为什么?
解决方案 »
- 所做的应用系统,客户要求能满足他们的单点登录系统 我应该怎么改
- 使用FileFilter如何过滤文件?
- c/s结构,Swing和socket的传输的问题和加载图片能够点击动态执行的问题(在线等)
- 急!!!帮忙看看问题出在哪,小女子先在此拜谢!
- 请高手帮忙看看这个程序
- 各位大神:请问如何实现,每调用一次一个方法,返回值加一?
- 急问:请问在JBuilder里如何将源文件编译为.exe文件???
- 想用Java写一个俄罗斯方块的程序,请高手给点意见!~~
- JAVA白痴问题 20分白给
- 哪里有"Thinking in Java"第二版的中译本的全书下载?
- 做java开发,需要用到哪些技术
- 新人学JAVA,求达人指点!!
什么样的编译期就能确定呢?
那就是由常量来初始化的字符串ss1=ss1+"def";
右侧有变量,所以编译期不能确定不过再次强调,不需要研究和专这种问题
java 对此的实现有过改变,难保以后不改
搞清楚这个问题没有任何意义
==和equal不要用错了
刚开始ss1已经存在abc了
当你在创建一个引用的时候 首先他回去找在静态代码区域里面有没有此常量。
如果有,相同的,就指向相同的内存地址。
2、第二次由于内存地址改变了,所以等于false
“==” 是比较栈内存地址是否一样