黑马程序员技术交流社区
标题:
java 小问题
[打印本页]
作者:
wangkerui
时间:
2014-6-7 19:35
标题:
java 小问题
本帖最后由 wangkerui 于 2014-6-8 13:35 编辑
public class Test_4 {
public static void main(String[] args) {
int a =2;
byte b = 2;
if(a == b){
System.out.print(true);
}
}
}
复制代码
数据类型不同,打印的结果怎样会是 true 呢,求解释?
作者:
王琪
时间:
2014-6-7 20:05
我觉得是,在类型上,整形和浮点数不同,整数没有丢失精度之分,所以byte与int比较就会相等,
int与double与float比较
public class java{
public static void main(String[]args){
int a=2;
float b=2.0f;
double c=2.0;
if (a==b)
System.out.println("1Y");
else
System.out.println("1N");
if(a==c)
System.out.println("2Y");
else
System.out.println("2N");
}
}
复制代码
1Y
2Y
byte类型
public class java{
public static void main(String[]args){
byte a=2;
float b=2.0f;
double c=2.0;
if (a==b)
System.out.println("1Y");
else
System.out.println("1N");
if(a==c)
System.out.println("2Y");
else
System.out.println("2N");
}
}
复制代码
1Y
2Y
但是对于小数之间会出现问题
public class java{
public static void main(String[]args){
float b=2.0f;
double c=2.0;
if (b==c)
System.out.println("1Y");
else
System.out.println("1N");
}
}
复制代码
1Y
但是出现了小数位就会不同
public class java{
public static void main(String[]args){
float b=2.1f;
double c=2.1;
if (b==c)
System.out.println("1Y");
else
System.out.println("1N");
}
}
复制代码
1N
这和类型之间的转换有关小类型会自动转换为大类型,整数位没有事,但是小数位会出现精度丢失,
我就了解这些希望可以帮到你
作者:
ゞ导火索゛
时间:
2014-6-7 20:09
java中byte,short类型在运算时会自动先进行隐式转换成int型,在运算
作者:
夏季熬成了秋
时间:
2014-6-7 21:46
在java中做运算时候会服从自动隐式转换原则 转换顺序:: short ,byte ----->转向---->int ----->转向---->long ----->转向---->float ----->转向---->double 特别注意的是: 两个char类型的运算是转向int,一个char类型一个别的类型运算也是转向int类型.
希望对你有所帮助.
作者:
面向大众
时间:
2014-6-7 22:34
本帖最后由 面向大众 于 2014-6-7 22:43 编辑
看到选择语句 if 说明其后面小括号的内部是一个
以布尔表达为结果的判断
,在做布尔类型的判断时要用到
布尔运算符
,那么既然是运算那就有隐式转换的规则:
在
隐式转换
中,
浮点类型的运算会默认转换为double类型
;
整数类型的运算
(包括char类型)
会默认转换为int类型再运算
。
作者:
葛生辉
时间:
2014-6-8 00:09
这问题太有内涵了瞬间让我觉得像这问题
int a=1;
byte b=1;
if ((a+b) ==2)
System.out.print(true);
作者:
华绪海
时间:
2014-6-8 00:40
根据运算的隐式转换规则,byte会自动的转换成int的类型、、、、、
作者:
满面春风
时间:
2014-6-8 00:41
==符号两边比较的是值是否相等,和内存中存放的地址无关】
作者:
谭荣强
时间:
2014-6-8 02:56
我觉的:
这根本就不是强转的问题,这是==的用法,基本数据类型比较看值是否相等。
根本就不看类型。
而且,类型转换是在算术元算符(加减乘除等)和赋值运算符(+=,-=等)
==和!=的是关系运算符,它好像不强转。
顶留上那位:满面春风
作者:
杨胜男
时间:
2014-6-8 09:26
==运算时会自动转型的int a==(int)b;
作者:
123_yaya
时间:
2014-6-8 10:45
看答案来了。。有两种答案,一种说是==比较值,一种是说数值强行转换问题。在验证的过程中,再百度了一下。我的结论是: equals() 比较的是两个对象的值(内容)是否相同。
"==" 比较的是
两个对象的引用
(内存地址)是否相同,也用来比较
两个基本数据类型
的变量值是否相等,但是在比较两个基本数据类型的时候,也要考虑到小数问题是否失精度,三楼说得很好。贴上代码。
public class java{
//利用装箱拆箱原理验证一下
public static void main(String[]args){
//在-128~127 之外的数,不自动拆箱装箱,所以这时候比较的是内存地址
Integer i1 = 200;
Integer i2 = 200;
System.out.println("i1==i2: "+(i1==i2)); //结果为false
// 在-128~127 之内的数,自动拆箱装箱,比较的是基本数据类型的值
Integer i3 = 100;
Integer i4 = 100;
System.out.println("i3==i4: "+(i3==i4)); //结果为true
}
}
复制代码
作者:
wangkerui
时间:
2014-6-9 13:32
王琪 发表于 2014-6-7 20:05
我觉得是,在类型上,整形和浮点数不同,整数没有丢失精度之分,所以byte与int比较就会相等,
int与double ...
明白了,谢谢。
作者:
北极£莜蓝
时间:
2014-6-9 16:32
if(a == b)括号里面的是 表达式是:a == b 的表达结果是TRUE 执行if语句, 即System.out.print(true)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2