public class Test {
public static void main(String[] args) {
final String pig = "length: 10";
//1
final String dog = "length: 10";
//2
final String dog = "length: " + pig.length();
System.out.println("Animals are equal: " + (pig == dog));
}
}
//定义dog的时候,分别用这两种方法,有什么不同嘛?请指点一下?
public static void main(String[] args) {
final String pig = "length: 10";
//1
final String dog = "length: 10";
//2
final String dog = "length: " + pig.length();
System.out.println("Animals are equal: " + (pig == dog));
}
}
//定义dog的时候,分别用这两种方法,有什么不同嘛?请指点一下?
解决方案 »
- 使用socket传送文件时,如何把文件名和文件类型也通过socket传送给服务器?
- 关于在myeclipse查看开源源代码的问题
- com.sybase.jdbc3.utils.UnimplementedOperationException
- 急求bp神经网络的java源码,请好心人帮帮忙
- 一个高校里的java难题!~紧急求助!~!~紧急求助!~!~紧急求助!~!~紧急求助!~!~紧急求助!~
- 求高人指点super()的用法?附例子
- <Swing> 询问一个关于Swing布局的问题
- 为什么我不能插入 javax.servlet.*的包呢?
- 如何使新生成的Frame显示出来?
- 谁有JDBC3.0的包,请Mail给我。
- 如何实现exe文件在没有JVM的机子上运行呢
- static初始化的问题
比较详细了,看了就明白了
不管你给这两个变量初始化成一个什么样的值,结果都是FALSE的
例如A.equals(B)是比较A和B
==比较的是引用
1的话编译器会对final常量作优化,pig和dog指向的是同一个存储单元。
2,false
个人觉的
====
不是为什么后面一个不是?
====
后面一个先生成一个string对象"length: " 地址为A,再生成一个string对象pig.length()
,地址为B,然后再连接这两个字符串,得到新的一个字符串,地址为C,最后将C传给dog,并设dog为不可更改final常量作优化是什么意思啊?
====
对于1,编译器先看是否已经有了"length: 10",发现没有,于是编译器生成一个内容为"length: 10"的字符串,将其引用A传给pig。
这时执行到dog那句,编译器先看是否已经有了"length: 10",发现有了,于是直接将A赋给dog,而不再生成新的临时变量了