java運算子

joey kang 2020-06-21 07:51:32
(A)b.test();-------------------------------------->編譯錯誤



((A)b).test();------------------------------------------------->正確




請問為什麼

(A)b不會先算,而要加( )才會先算呢?
...全文
4304 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CS_草祭先生 2020-06-23
  • 打赏
  • 举报
回复
1、你这个test()方法肯定是A类里面,b所对应的实体类里应该是没有的; 2、括号的优先级最高,所以((A)b)就是先把b转换为A,然后才能点出test()方法; 但是这种所谓的正确也有很大的风险,如果类型不兼容也一样会类型转换错误异常。
rumlee 2020-06-22
  • 打赏
  • 举报
回复
(A)b.test(); 等同于 (A)(b.test()); 如果b.test()的返回值是允许强制转换A类型的话,则 A a = (A)b.test(); 这种写法也是没毛病的,但是你的写法那肯定是错误的。
人情茶色 2020-06-22
  • 打赏
  • 举报
回复
首先你b里面是没有方法test方法,A中存在test方法对吧,而(A)b.test(); 表示的是将b.test();的返回结果强转为A类;
而((A)b).test(); 表示的是,先将b强转为A后去点用test方法,等同于直接用A调用A中的方法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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