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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 983859111 中级黑马   /  2016-2-25 11:34  /  823 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 983859111 于 2016-2-25 11:35 编辑
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 float num = 1500.00f;
  4.                 int a=(int)num;
  5.                 println(num);
  6.                 println(a);
  7.                 println(num==a);
  8.                 println(num == a ? a : num);
  9.         }

  10.         public static void println(Object arg0) {
  11.                 System.out.println(arg0);
  12.         }
  13. }
复制代码

请写出四行打印信息
给大家出个题,测试下大家的java基础知识,
答对了版主可能会给加分的哦…………(版主还不知道,加不加分他说了算。。。)


点评

加加加 一律加  发表于 2016-2-25 23:24

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1 赞一个!

查看全部评分

12 个回复

倒序浏览
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 float num = 1500.00f;
  4.                 int a=(int)num;
  5.                 println(num);
  6.                 println(a);
  7.                 println(num==a);
  8.                 println(num == a ? a : num);
  9.         }

  10.         public static void println(Object arg0) {
  11.                 System.out.println(arg0);
  12.         }
  13. }
复制代码


我得出的结果是:
1500.00
1500
true
1500
jvm给的是:
1500.0
1500
true
1500.0
有点不太明白了
求解释

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 很给力!

查看全部评分

回复 使用道具 举报
JeromeLiee 发表于 2016-2-25 11:51
我得出的结果是:
1500.00
1500

最后问的是。num等于a吗?
==比较的是内存地址值。
一个float,一个int。这两个存储的地址会相同吗?
不相同的话,输出num。
回复 使用道具 举报
曾宇 发表于 2016-2-25 12:28
最后问的是。num等于a吗?
==比较的是内存地址值。
一个float,一个int。这两个存储的地址会相同吗?

==比的是地址值,那么println(num == a)如果是true的话,那么最后一个打印的应该是a啊,也就是1500。还有num的值打印怎么不是1500.00,而是1500.0,小数点后只有一个0?
回复 使用道具 举报
哈哈,帮顶
回复 使用道具 举报
曾宇 发表于 2016-2-25 12:28
最后问的是。num等于a吗?
==比较的是内存地址值。
一个float,一个int。这两个存储的地址会相同吗?

那请解释下第三行  a==num  输出true 的原因
回复 使用道具 举报
曾宇 中级黑马 2016-2-25 14:24:12
7#
983859111 发表于 2016-2-25 13:38
那请解释下第三行  a==num  输出true 的原因

是我错了,误导人了
第三行,a==num,比较的是内存地址值。内存地址内指向常量池,值相等的情况下,常量池地址相等。所以是true。
第四行,num == a ? a : num,num是a么?是输出a,不是输出num。所以输出num
回复 使用道具 举报
曾宇 中级黑马 2016-2-25 14:28:00
8#
本帖最后由 曾宇 于 2016-2-25 14:44 编辑
983859111 发表于 2016-2-25 13:38
那请解释下第三行  a==num  输出true 的原因

是我错了,误导人了
第三行,a==num,比较的是内存地址值。内存地址内指向常量池,值相等的情况下,常量池地址相等。所以是true。
第四行,num == a ? a : num。输出的结果是a。两个值做比较的时候,会自动向高精度转型。所以输出1500.0

回复 使用道具 举报
本帖最后由 参禅悟道 于 2016-2-25 14:39 编辑

抛开楼主的代码,你们打印一下这句代码:
System.out.println(true ? 1 : 2.0);
结果是:1.0我想应该是在进行int和float比较的时候,先把int类型的数据转换成了float类型的也就是:System.out.println(true ? 1.0 : 2.0);
所以打印出结果的时候是1.0
至于上面有人说==比较的是内存地址,这句话并没有错,但是a==num确实返回true,所以三元表达式num == a ? a : num确实打印的是a,只不过这个时候的a已经转换成float类型了。具体我也不是很清楚就不多做评论了
不知道我这样的解释对不对。

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2

查看全部评分

回复 使用道具 举报 1 0
曾宇 发表于 2016-2-25 14:28
是我错了,误导人了
第三行,a==num,比较的是内存地址值。内存地址内指向常量池,值相等的情况下,常量池 ...

三元操作符必须返回同一个数据,而且类型要确定,不可能条件为真返回int类型,条件为假返回float类型,编译器是不会允许的,所以进行类型转换了。
回复 使用道具 举报
给个具体说明
回复 使用道具 举报
楼上的诸位其实都已经回答对了,我给大家总结下:
  1. class TernaryOperation {
  2.         public static String s1 = "数据1";
  3.         public static String s2 = "数据2";
  4.         public static String result;

  5.         public static void main(String[] args) {
  6.                 // if方法带回的返回值
  7.                 result = ternaryOperation();
  8.                 // 三元运算
  9.                 result = (s1.equals(s2) ? "正确" : "错误");

  10.         }

  11.         public static String ternaryOperation() {
  12.                 if (s1.equals(s2)) {
  13.                         return "正确";
  14.                 } else {
  15.                         return "错误";
  16.                 }
  17.         }
  18. }
复制代码

三元运算其实可以看成本质是一个带返回值的if判断方法;
所以,方法的返回值必须要明确一个类型;三元运算的a==b?c:d 中 c、d就相当于if、else的两个返回值,应该是有默认的返回值类型;
所以,才会有出现转型;或者是返回父类对象的情况。

评分

参与人数 1黑马币 +3 收起 理由
洋葱头头 + 3 淡定

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马