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
解决方案 »
- List一个对象取不到值
- 请教List用法
- 如何在一句话中找到特定的单词?
- 删除GridBagConstraints
- 请问关于路径设置的问题
- JAVA默认函数参数的传递是传值还是传引用啊?
- 连接数据库时出现[Message][ODBC 驱动程序 管理器]非法的描述器索引。是什么问题?
- 简单问题,答对者有分。
- 小弟刚下载了j2sdkee1.2.1 ,但不知道如何配置,那位大哥愿意帮忙,详细讲一讲如何配置。
- Java如何获得当前程序的CPU、内存使用情况?
- BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 方法
- java初学者请教
所以
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在这里是变量宏吧!!!
楼主理解挺快