gzq44 发表于 2020-10-29 17:25:59

java的一些简单问题求助

第一张的第六题第一个System.out.printf的结果是98
第二张的第二个System.out.printf是80,本来应该是8.0为什么变成80了
第三张的第一个System.out.printf为什么会去到float x,float y哪里去数据类型都不一样把,数字后面没有f,第二个不应该是20吗??
{:10_263:} 帮帮忙

mrcrisis 发表于 2020-10-29 20:01:18


super就是父类 传入10和8 调用A的f就是10+9=18 传给m
再m+10*8=18+80=98

实际跑一下,结果就是8.0
https://s1.ax1x.com/2020/10/29/BJwujO.png

在有函数重载的情况下,java编译器会自动选择最匹配的函数进行调用
class B {
        void f(float x){
                System.out.println(1);
        }
        void f(double x){
                System.out.println(2);
        }
}
public class E {
        public static void main(String[] args) {
                B b = new B();
                b.f(3);
        }
}

gzq44 发表于 2020-10-29 22:49:17

请看

gzq44 发表于 2020-10-29 22:50:25

mrcrisis 发表于 2020-10-29 20:01

super就是父类 传入10和8 调用A的f就是10+9=18 传给m
再m+10*8=18+80=98


我发了书里的例子,你看下和你对于第三个问题的回答不太一样,书上是说出现歧义则无法通过编译,而你却说会自动匹配相近的

mrcrisis 发表于 2020-10-30 09:23:30

gzq44 发表于 2020-10-29 22:50
我发了书里的例子,你看下和你对于第三个问题的回答不太一样,书上是说出现歧义则无法通过编译,而你却说 ...

这样子理解 类型会自动匹配 优先级是 int->float->double
所以我的例子是传一个int过去 编译器把他看成了float
在看你的
你没发代码 我估计应该是这样定义的
cry(double, int)
cry(int, double)
然后传两个int进去,但是都是int转double,是第一个转还是第二个转,编译器无法确定

wylll 发表于 2020-10-31 00:37:55

一样的书,敢问实验八写了吗
页: [1]
查看完整版本: java的一些简单问题求助