A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangkerui 中级黑马   /  2014-6-7 19:35  /  2145 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangkerui 于 2014-6-8 13:35 编辑
  1. public class Test_4 {

  2.         public static void main(String[] args) {
  3.          int a =2;
  4.          byte b = 2;
  5.          
  6.          if(a == b){
  7.                  System.out.print(true);
  8.          }
  9.      }

  10. }
复制代码
数据类型不同,打印的结果怎样会是 true 呢,求解释?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

12 个回复

倒序浏览
我觉得是,在类型上,整形和浮点数不同,整数没有丢失精度之分,所以byte与int比较就会相等,
int与double与float比较
  1. public class java{
  2.         public static void main(String[]args){
  3.                 int a=2;
  4.                 float b=2.0f;
  5.                 double c=2.0;
  6.                 if (a==b)
  7.                 System.out.println("1Y");
  8.                 else
  9.                 System.out.println("1N");
  10.                 if(a==c)
  11.                 System.out.println("2Y");
  12.                 else
  13.                 System.out.println("2N");
  14.         }
  15. }
复制代码

1Y
2Y

byte类型
  1. public class java{
  2.         public static void main(String[]args){
  3.                 byte a=2;
  4.                 float b=2.0f;
  5.                 double c=2.0;
  6.                 if (a==b)
  7.                 System.out.println("1Y");
  8.                 else
  9.                 System.out.println("1N");
  10.                 if(a==c)
  11.                 System.out.println("2Y");
  12.                 else
  13.                 System.out.println("2N");
  14.         }
  15. }
复制代码

1Y
2Y

但是对于小数之间会出现问题
  1. public class java{
  2.         public static void main(String[]args){
  3.                 float b=2.0f;
  4.                 double c=2.0;
  5.                 if (b==c)
  6.                 System.out.println("1Y");
  7.                 else
  8.                 System.out.println("1N");
  9.         }
  10. }
复制代码

1Y
但是出现了小数位就会不同
  1. public class java{
  2.         public static void main(String[]args){
  3.                 float b=2.1f;
  4.                 double c=2.1;
  5.                 if (b==c)
  6.                 System.out.println("1Y");
  7.                 else
  8.                 System.out.println("1N");
  9.         }
  10. }
复制代码

1N
这和类型之间的转换有关小类型会自动转换为大类型,整数位没有事,但是小数位会出现精度丢失,
我就了解这些希望可以帮到你
回复 使用道具 举报
java中byte,short类型在运算时会自动先进行隐式转换成int型,在运算
回复 使用道具 举报
在java中做运算时候会服从自动隐式转换原则  转换顺序:: short  ,byte ----->转向---->int  ----->转向---->long ----->转向---->float ----->转向---->double  特别注意的是: 两个char类型的运算是转向int,一个char类型一个别的类型运算也是转向int类型.
希望对你有所帮助.
回复 使用道具 举报
本帖最后由 面向大众 于 2014-6-7 22:43 编辑

看到选择语句 if 说明其后面小括号的内部是一个以布尔表达为结果的判断,在做布尔类型的判断时要用到布尔运算符,那么既然是运算那就有隐式转换的规则:
隐式转换中,浮点类型的运算会默认转换为double类型整数类型的运算(包括char类型)会默认转换为int类型再运算
回复 使用道具 举报
这问题太有内涵了瞬间让我觉得像这问题
int a=1;
byte b=1;
if ((a+b) ==2)
  System.out.print(true);


回复 使用道具 举报
根据运算的隐式转换规则,byte会自动的转换成int的类型、、、、、
回复 使用道具 举报
==符号两边比较的是值是否相等,和内存中存放的地址无关】

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
我觉的:
这根本就不是强转的问题,这是==的用法,基本数据类型比较看值是否相等。
根本就不看类型。
而且,类型转换是在算术元算符(加减乘除等)和赋值运算符(+=,-=等)
==和!=的是关系运算符,它好像不强转。
顶留上那位:满面春风
回复 使用道具 举报
==运算时会自动转型的int a==(int)b;
回复 使用道具 举报
看答案来了。。有两种答案,一种说是==比较值,一种是说数值强行转换问题。在验证的过程中,再百度了一下。我的结论是:        equals() 比较的是两个对象的值(内容)是否相同。
"==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等,但是在比较两个基本数据类型的时候,也要考虑到小数问题是否失精度,三楼说得很好。贴上代码。

  1. public class java{
  2.         //利用装箱拆箱原理验证一下
  3.     public static void main(String[]args){
  4.             //在-128~127 之外的数,不自动拆箱装箱,所以这时候比较的是内存地址
  5.              Integer i1 = 200;  
  6.              Integer i2 = 200;         
  7.              System.out.println("i1==i2: "+(i1==i2));    //结果为false               
  8.              // 在-128~127 之内的数,自动拆箱装箱,比较的是基本数据类型的值
  9.              Integer i3 = 100;  
  10.              Integer i4 = 100;  
  11.              System.out.println("i3==i4: "+(i3==i4));   //结果为true
  12.            
  13.     }
  14. }
复制代码
回复 使用道具 举报
王琪 发表于 2014-6-7 20:05
我觉得是,在类型上,整形和浮点数不同,整数没有丢失精度之分,所以byte与int比较就会相等,
int与double ...

明白了,谢谢。      
回复 使用道具 举报
if(a == b)括号里面的是  表达式是:a  == b 的表达结果是TRUE  执行if语句,    即System.out.print(true)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马