求教大神两个关于String常量的程序输出问题! 其实它们输出的值是一样的,只是比较的方法不一样,导致一个是true一个是false,用equals比较的话,输出的都是true 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一个true的原因是 字符常量取已经存在了 abcd的对象。在String t="abcd";的时候就不会再创建新的对象所以两个引用是相等的。 第二个 就是两个全新的对象了,肯定是false了 好绕啊。。个人的简单理解是这样的:第一个情况是因为在执行静态方法main的时候,常量A、B明确,因此等同于"ab"+"cd"操作。第二个情况,在执行静态方法main的时候,常量A、B不明确,通过执行static静态块的时候得到,此时A、B被当做变量处理了,效果等同于:String A = "ab";String B = "cd";String s = A+B;... +1http://www.coderanch.com/t/454384/java/java/compile-time-constant javap看一下字节码就知道怎么回事了 我的理解是这样的:第一个例子输出为true,是因为第一种写法在编译期间就可以确定String s的值了,因为A,B都是用final修饰的。所以String s会放到常量池而第二个例子中A,B都是放在静态初始化块中的,静态初始化块是当这个类第一次被JVM加载的时候执行的。而第一次被JVM加载是运行时的时候了,所以不会放到常量池中。所以为false. 向数据库添加数据时,连接字符串中的问题 谁有记事本的源代码? 救命呀 我要疯了 jxl问题 大虾们 来帮帮小弟吧 java 操作符问题 如何控制Thread生命周期 如何判断一个点是否落入指定的椭圆形和多边形内? 请教IntelliJ IDEA 的问题 ? 急急急~紧急求助一个问题! 为什么不允许创建监听者界面? 求Java编程 求教一个很蛋疼的问题 "手机运行程序用电量统计"到底作什么?[小白问]
个人的简单理解是这样的:
第一个情况是因为在执行静态方法main的时候,常量A、B明确,因此等同于"ab"+"cd"操作。
第二个情况,在执行静态方法main的时候,常量A、B不明确,通过执行static静态块的时候得到,此时A、B被当做变量处理了,效果等同于:
String A = "ab";
String B = "cd";
String s = A+B;
...
+1http://www.coderanch.com/t/454384/java/java/compile-time-constant
第一个例子输出为true,是因为第一种写法在编译期间就可以确定String s的值了,因为A,B都是用final修饰的。所以String s会放到常量池
而第二个例子中A,B都是放在静态初始化块中的,静态初始化块是当这个类第一次被JVM加载的时候执行的。
而第一次被JVM加载是运行时的时候了,所以不会放到常量池中。所以为false.