首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

String编译器优化有关问题

2012-08-15 
String编译器优化问题public class fourtest {public static final String i bpublic static void ma

String编译器优化问题
public class fourtest {
public static final String i = "b";

public static void main(String args[]) {
String b = "ab";
String a = "a" + i;
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
输出 true, ture。 这个结果是编译器优化的结果。

public class fourtest {
public static final String i = null;

public static void main(String args[]) {
String b = "anull";
String a = "a" + i;
System.out.println(a == b);
System.out.println(a.equals(b));
}
}

输出 false ,true。 这个时候为啥不是true,true。

[解决办法]
这种问题,你用jd-gui反编译一下生成的class文件就明白了

探讨

第一个例子中,i是final的。不定义final。 则输出 false, true 。 1楼能解释这个问题么
引用:

首先:楼主要搞清楚==和equals的区别
其他的区别先不说最大的区别在于:= =相对于栈中数据的比较; equals相对于堆中数据的比较;

其次:针对第一个例子
先在栈中创建一个对 String类的对象引用变量i,然后通过符号引用去字符串常量……

[解决办法]
这种问题,你用jd-gui反编译一下生成的class文件就明白了

探讨

第一个例子中,i是final的。不定义final。 则输出 false, true 。 1楼能解释这个问题么
引用:

首先:楼主要搞清楚==和equals的区别
其他的区别先不说最大的区别在于:= =相对于栈中数据的比较; equals相对于堆中数据的比较;

其次:针对第一个例子
先在栈中创建一个对 String类的对象引用变量i,然后通过符号引用去字符串常量……

热点排行
Bad Request.