|      1humpy      2021-09-28 15:40:01 +08:00 方法签名不同啊 | 
|      2wangxn      2021-09-28 15:43:53 +08:00 via Android C++不能这样,指不定 Java 可以。 | 
|      4tsanie      2021-09-28 15:57:13 +08:00 这么神奇的嘛,那在这个类或其子类中调用 b()到底执行哪个方法? /doge | 
|      5mxT52CRuqR6o5      2021-09-28 15:59:50 +08:00 android java 是不是和原版 java 有点区别? | 
|  |      6BQsummer      2021-09-28 16:00:42 +08:00 artifactId 和 version 是啥 | 
|  |      7ipwx      2021-09-28 16:01:10 +08:00 盲猜字节码层面可能有些不一样(我不懂 java ) | 
|  |      8ligiggy      2021-09-28 16:05:48 +08:00 我也不懂 java,但是有没有一种可能,我是说有没有一种可能,synchronized 这个用法会被编译器优化 | 
|      9yazinnnn      2021-09-28 16:10:27 +08:00 gav 坐标发一下看看 | 
|  |      10wangsilence      2021-09-28 16:27:57 +08:00 我本地试了 编译不通过啊 | 
|      11hsiafan      2021-09-28 16:36:36 +08:00  7 JVM 里方法签名是包含返回值类型的,返回值类型不同,方法签名不同,可以同时存在。不能存在不同返回值类型的相同 Java 方法是 Java 语言层面的限制,也即 javac 编译的限制。直接操作字节码可以写出这样方法,是完全合法的。 | 
|  |      12kop1989 OP @xiaxiaocao #11 学习了,能不能大概说说这样做的意义和场景? | 
|  |      13nonoyang      2021-09-28 17:49:34 +08:00 如果编译通过,直接调用 PushMessageHandler.b(),忽略返回值,你觉得代码能知道该调用哪个? | 
|      15evi1j      2021-09-28 18:36:46 +08:00 via Android java 泛型的桥接模式也有这种情况,javap 之后就会看到有签名相同的方法 | 
|      16maokabc      2021-09-28 19:35:20 +08:00 via Android 不是返回值不同吗?一个方法签名()V,一个()Z,java 层面不能这样写,字节码可以。 再说了内部类有时生成一些方法名和方法签名完全一样的方法,就访问控制符多了 bridge 之类,之前做安卓的加固遇到过,怕出问题就没把 bridge 这类方法转为 native 。 | 
|  |      17secondwtq      2021-09-28 22:23:02 +08:00 有点像 C++ 的 name mangling | 
|  |      18leaves615      2021-09-28 22:37:25 +08:00 字节码混淆(压缩)过的 jar 。 不能直接反编译过来用的。  下一个问题。 |