论坛首页 入门技术论坛

java 自动拆箱及装箱

浏览 1755 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-29  

  闲逛百度知道,发现有人问

float a=2;

Float b=2f;

System.out.println(a==b);//true

System.out.println(b==a);//true

 

 

问为什么一个是对象一个是基本类型,用==比较还是true

 

之前也没细看过,于是写代码:

public static void main(String[] args){
	float a=2f;
	Float b=2f;
	Float c=2f;
	System.out.println(b==a);
}

 

反编译.class,得到

 

public static void main(String args[]){
	float a = 2.0F;
	Float b = Float.valueOf(2.0F);
	Float c = Float.valueOf(2.0F);
	System.out.println(b.floatValue() == a);
}

 

 

其实是编译器自动进行了处理,所以在这里依旧是值比较,同理另外几个基本类型及包装类型。

菜鸟文章高手路过

   发表时间:2009-06-29  
Float a=2f;
Float b=2f;
为什么a==b为false
String a="aaaa";
String b="aaaa";
为什么a==b却为true
而且float a=2f;
Float b=2f;
a==b为true
0 请登录后投票
   发表时间:2009-06-30  
murener 写道
Float a=2f;
Float b=2f;
为什么a==b为false
String a="aaaa";
String b="aaaa";
为什么a==b却为true
而且float a=2f;
Float b=2f;
a==b为true


String a="aaaa";
String b="aaaa";
String c=new String("aaaa");//这里c==b就是false了
为什么a==b却为true

这里"aaaa"是这字符常量,保存在字符常量池,a,b均指向这个字符常量所以他们的引用也就一样。

Float a=2f;
Float b=2f;
这里两个都是对象,不存在拆箱,比较的是引用。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics