public class finalTest
{
public static void main(String[] args)
{
final String book = "测试:"+ 99.0;
final String book2 = "测试:"+ String.valueOf(99.0);
System.out.println(book == "测试:99.0");
System.out.println(book2 == "测试:99.0");
}
}麻烦大家给我分析分析 为什么输出为true,false
{
public static void main(String[] args)
{
final String book = "测试:"+ 99.0;
final String book2 = "测试:"+ String.valueOf(99.0);
System.out.println(book == "测试:99.0");
System.out.println(book2 == "测试:99.0");
}
}麻烦大家给我分析分析 为什么输出为true,false
所以
System.out.println(book == "测试:99.0"); //book指向常量池的"测试:99.0"常量对象,
//所以==为ture,即book所引用的对象就是常量对象"测试:99.0"
System.out.println(book2 == "测试:99.0");//book2没有指向常量池的"测试:99.0"常量对象,
//所以==为false,book2所引用的对象和常量对象"测试:99.0"不是同一个对象
static final修饰的属性才是常量
所以你这里用==比较的 不仅仅是字符串相等还得比较地址的值是否相等
第一个book地址接收的是 字符串加double型后的值
第二个book2会在堆内存新开辟一个地址接 字符串加转换成String后的double值
虽然两个地址里的字符串都相等 但是用==比较因为地址不等所以false
如果你book2用 equals比较 就是true
{
public static void main(String[] args)
{
String book = "测试:"+ 99.0; String book2 = "测试:"+ String.valueOf(99.0);System.out.println(book == "测试:99.0");
System.out.println(book2 == "测试:99.0");
System.out.println(String.valueOf(99.0) == "99.0");
}
}
这是答案 和final 没关系
false
false
String s2 = "test final";
final String s3 = "test";
final String s4 = " final";
String s5 = s3+s4;
System.out.println(s1==s2);
System.out.println(s1==s5);这个就和fianl有关系了?final在这里是变量宏吧!!!
楼主理解挺快