java == 的问题(悄悄的来吐槽一下隔壁java,哈哈哈)

正怒月神 2019-06-13 06:02:12
悄悄的来吐槽一下隔壁java,哈哈哈,
开个玩笑,希望隔壁java的童鞋不要介意。
让.net版块的大家乐呵乐呵。。

事情是这样的:

由于我.net 用习惯了。
今天java中判断 Double习惯使用了==判断包装类型。
结果让我有点震惊。
谁来告诉我
两个包装类型
//a==c false,
但是一个包装类型,一个值类型
//a==d true
我本来觉得吧。==号会比较左右两边的类型,选择合适的判断方式。
那按照这样来说,>=和<=又不是按照==的方式去看两边变量类型了?
这里就留给大家讨论了
public class TestUnit implements ITest {

@Test
public void Test1()
{
Double a=1.0d;
Double b=2.0d;
Double c=1.0d;
double d=1.0d;

System.out.println("a>b "+(a>b)); //a>b false
System.out.println("a==b "+(a==b)); //a==b false
System.out.println("a<b "+(a<b)); //a<b true

System.out.println("a==c "+(a==c)); //a==c false
System.out.println("a>=c "+(a>=c)); //a>=c true

System.out.println("a==d "+(a==d)); //a==d true

System.out.println("a.compareTo(c) " +a.compareTo(c));
}
}
...全文
316 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2019-06-14
  • 打赏
  • 举报
回复
引用 13 楼 by_封爱 的回复:
java之神表示不符
对,java不给重载操作符。的确不符。。。。
by_封爱 2019-06-14
  • 打赏
  • 举报
回复
java之神表示不符
正怒月神 2019-06-14
  • 打赏
  • 举报
回复
引用 10 楼 assky124 的回复:
浮点不能直接判等于。 Kotlin了解下,用法和C#一样,兼容Java
这里只是举个例子, 换成decimal或许更明确点
正怒月神 2019-06-14
  • 打赏
  • 举报
回复
引用 8 楼 耗子哭死猫 的回复:
版主还发20分,抠门的都是抠脚大汉
因为穷,哈哈哈
assky124 2019-06-14
  • 打赏
  • 举报
回复
浮点不能直接判等于。 Kotlin了解下,用法和C#一样,兼容Java
  • 打赏
  • 举报
回复
涨见识了
耗子哭死猫 2019-06-14
  • 打赏
  • 举报
回复
版主还发20分,抠门的都是抠脚大汉
OrdinaryCoder 2019-06-14
  • 打赏
  • 举报
回复
引用 5 楼 正怒月神 的回复:
[quote=引用 4 楼 OrdinaryCoder 的回复:]
System.out.println("a>b "+(a>b)); //a>b false 这个没啥问题
System.out.println("a==b "+(a==b)); //a==b false 这个也没啥问题
System.out.println("a<b "+(a<b)); //a<b true 这个也没啥问题

System.out.println("a==c "+(a==c)); //a==c false 这个为啥是false
System.out.println("a>=c "+(a>=c)); //a>=c true 这个没啥问题

System.out.println("a==d "+(a==d)); //a==d true 为啥这个是true 和c比的时候就是false

我没写过java double不是Double的别名吗?

java的Double就是C#的Nullable<double>
而double就是值类型的。
然而在==比较中
java的//a==c false, 因为它认为两边是包装类型,所以比较地址
c#就是true了,而C#的==,会根据两边的类型调整来比较。甚至可空值类型和引用类型使用==的规则也是不同的。
所以我感觉还是C#处理更符合习惯。[/quote]
可能我用C#的原因 我也觉得C#更合理
it_gz_xi 2019-06-14
  • 打赏
  • 举报
回复
正怒月神 2019-06-14
  • 打赏
  • 举报
回复
引用 4 楼 OrdinaryCoder 的回复:
System.out.println("a>b "+(a>b)); //a>b false 这个没啥问题 System.out.println("a==b "+(a==b)); //a==b false 这个也没啥问题 System.out.println("a<b "+(a<b)); //a<b true 这个也没啥问题 System.out.println("a==c "+(a==c)); //a==c false 这个为啥是false System.out.println("a>=c "+(a>=c)); //a>=c true 这个没啥问题 System.out.println("a==d "+(a==d)); //a==d true 为啥这个是true 和c比的时候就是false 我没写过java double不是Double的别名吗?
java的Double就是C#的Nullable<double> 而double就是值类型的。 然而在==比较中 java的//a==c false, 因为它认为两边是包装类型,所以比较地址 c#就是true了,而C#的==,会根据两边的类型调整来比较。甚至可空值类型和引用类型使用==的规则也是不同的。 所以我感觉还是C#处理更符合习惯。
OrdinaryCoder 2019-06-14
  • 打赏
  • 举报
回复
System.out.println("a>b "+(a>b)); //a>b false 这个没啥问题
System.out.println("a==b "+(a==b)); //a==b false 这个也没啥问题
System.out.println("a<b "+(a<b)); //a<b true 这个也没啥问题

System.out.println("a==c "+(a==c)); //a==c false 这个为啥是false
System.out.println("a>=c "+(a>=c)); //a>=c true 这个没啥问题

System.out.println("a==d "+(a==d)); //a==d true 为啥这个是true 和c比的时候就是false

我没写过java double不是Double的别名吗?
正怒月神 2019-06-13
  • 打赏
  • 举报
回复
a==c也是 false,我不小心擦掉了
极客诗人 2019-06-13
  • 打赏
  • 举报
回复
我来节分 提前祝您新年快乐
正怒月神 2019-06-13
  • 打赏
  • 举报
回复
哈哈哈,我发帖的时候, 邀请回复,系统给我推荐了自己。

7,774

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧