这个问题基于Android场景,但通常适用于Java.
在AndroID中,ContentValues类具有许多put()方法,包括:
put(String key, float value)put(String key, Integer value)
我们的代码有:
contentValues.put(myKey, myCondition ? Utils.getfloat(something) : Utils.getInt(something));
我们已经观察到,执行此 *** 作时,始终会调用put(String key,float value).即使由于不满足myCondition而将三元运算符解析为整数值,也会发生这种情况.
在我们的案例中,用if-else替换它可以解决问题.我真的是想解释一下虚拟机何时以及如何选择要执行的方法.
如果已经回答过,请将其标记为重复.提前致谢!
解决方法:
方法重载在编译时解决,而不在运行时解决.三元表达式的类型为Number-大概有put(String key,Number value)方法或put(String key,Object value)方法.编辑:我被告知它实际上是被强制为float. JLS describes this in more detail.
其他语言可以在运行时解决重载.此功能被称为double-dispatch,因为首先按参数类型然后按自身类型对方法进行两次分派.
总结以上是内存溢出为你收集整理的java-VM如何选择正确的方法执行?全部内容,希望文章能够帮你解决java-VM如何选择正确的方法执行?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)