<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Igen, közben éppen ezt olvasom. Nem egyszerű megérteni.<div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><span class="Apple-style-span" style="color: rgb(136, 136, 136); ">--</span><span class="Apple-style-span" style="color: rgb(136, 136, 136); "><br></span><span class="Apple-style-span" style="color: rgb(136, 136, 136); ">Verhás Péter</span><span class="Apple-style-span" style="color: rgb(136, 136, 136); "><br></span><span class="Apple-style-span" style="color: rgb(136, 136, 136); "></span><span class="Apple-style-span" style="color: rgb(136, 136, 136); "><a href="mailto:peter@verhas.com">peter@verhas.com</a></span><span class="Apple-style-span" style="color: rgb(136, 136, 136); "><br></span><span class="Apple-style-span" style="color: rgb(136, 136, 136); ">+36(30)9306805</span><span class="Apple-style-span" style="color: rgb(136, 136, 136); "><br></span><span class="Apple-style-span" style="color: rgb(136, 136, 136); ">skype: verhas</span></div></div></span><br class="Apple-interchange-newline"></div></span><br class="Apple-interchange-newline"></span><br class="Apple-interchange-newline">
</div>
<br><div><div>On 2012.07.21., at 18:19, Böszörményi Péter wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Szerintem ez nem bug. Magyarazatom nincs, de talan ezek adnak otletet:<br><a href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25:">http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25:</a><br>The type of a conditional expression is determined as follows:<br>[...]<br>* Otherwise, binary numeric promotion (§5.6.2) is applied to the operand types, and the type of the conditional expression is the promoted type of the second and third operands.<br><br>http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2:<br>When an operator applies binary numeric promotion to a pair of operands, each of which must denote a value that is convertible to a numeric type, the following rules apply, in order:<br>[...]<br>* If either operand is of type double, the other is converted to double.<br><br><br>On Sat, 21 Jul 2012 17:56:41 +0200, Peter Verhas &lt;peter@verhas.com&gt; wrote:<br><br><blockquote type="cite">A következő osztályt alkottam:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">public class Bug{<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;public static Number q(Number in) {<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return in instanceof Long ? 1L : 1.0;<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;}<br></blockquote><blockquote type="cite">}<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Ebből a következős sikerült a Java-nak fordítania:<br></blockquote><blockquote type="cite">verhasp:test verhasp$ javac Bug.java<br></blockquote><blockquote type="cite">verhasp:test verhasp$ javap -v Bug.class<br></blockquote><blockquote type="cite">Classfile /Users/verhasp/projects/test/Bug.class<br></blockquote><blockquote type="cite"> &nbsp;Last modified 2012.07.21.; size 392 bytes<br></blockquote><blockquote type="cite"> &nbsp;MD5 checksum 7a7a2b3ddba08525477330df16f4ca78<br></blockquote><blockquote type="cite"> &nbsp;Compiled from "Bug.java"<br></blockquote><blockquote type="cite">public class Bug<br></blockquote><blockquote type="cite"> &nbsp;SourceFile: "Bug.java"<br></blockquote><blockquote type="cite"> &nbsp;minor version: 0<br></blockquote><blockquote type="cite"> &nbsp;major version: 51<br></blockquote><blockquote type="cite"> &nbsp;flags: ACC_PUBLIC, ACC_SUPER<br></blockquote><blockquote type="cite">Constant pool:<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#1 = Methodref &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#5.#15 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;java/lang/Object."&lt;init&gt;":()V<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#2 = Class &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#16 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;java/lang/Long<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#3 = Methodref &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#17.#18 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;java/lang/Double.valueOf:(D)Ljava/lang/Double;<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#4 = Class &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#19 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;Bug<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#5 = Class &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#20 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;java/lang/Object<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#6 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init&gt;<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#7 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()V<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#8 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Code<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;#9 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LineNumberTable<br></blockquote><blockquote type="cite"> &nbsp;#10 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q<br></blockquote><blockquote type="cite"> &nbsp;#11 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Ljava/lang/Number;)Ljava/lang/Number;<br></blockquote><blockquote type="cite"> &nbsp;#12 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StackMapTable<br></blockquote><blockquote type="cite"> &nbsp;#13 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SourceFile<br></blockquote><blockquote type="cite"> &nbsp;#14 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bug.java<br></blockquote><blockquote type="cite"> &nbsp;#15 = NameAndType &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#6:#7 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;"&lt;init&gt;":()V<br></blockquote><blockquote type="cite"> &nbsp;#16 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java/lang/Long<br></blockquote><blockquote type="cite"> &nbsp;#17 = Class &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#21 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;java/lang/Double<br></blockquote><blockquote type="cite"> &nbsp;#18 = NameAndType &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#22:#23 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// &nbsp;valueOf:(D)Ljava/lang/Double;<br></blockquote><blockquote type="cite"> &nbsp;#19 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bug<br></blockquote><blockquote type="cite"> &nbsp;#20 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java/lang/Object<br></blockquote><blockquote type="cite"> &nbsp;#21 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java/lang/Double<br></blockquote><blockquote type="cite"> &nbsp;#22 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueOf<br></blockquote><blockquote type="cite"> &nbsp;#23 = Utf8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(D)Ljava/lang/Double;<br></blockquote><blockquote type="cite">{<br></blockquote><blockquote type="cite"> &nbsp;public Bug();<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;flags: ACC_PUBLIC<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;Code:<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack=1, locals=1, args_size=1<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0: aload_0<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1: invokespecial #1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Method java/lang/Object."&lt;init&gt;":()V<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4: return<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LineNumberTable:<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line 1: 0<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"> &nbsp;public static java.lang.Number q(java.lang.Number);<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;flags: ACC_PUBLIC, ACC_STATIC<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;Code:<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack=2, locals=1, args_size=1<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0: aload_0<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1: instanceof &nbsp;&nbsp;&nbsp;#2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// class java/lang/Long<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4: ifeq &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7: dconst_1<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8: goto &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11: dconst_1<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12: invokestatic &nbsp;#3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Method java/lang/Double.valueOf:(D)Ljava/lang/Double;<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15: areturn<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LineNumberTable:<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line 3: 0<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StackMapTable: number_of_entries = 2<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame_type = 11 /* same */<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame_type = 64 /* same_locals_1_stack_item */<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack = [ double ]<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">}<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">A biztonság kedvéért command line-ból fordítottam ezzel:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">verhasp:test verhasp$ java -version<br></blockquote><blockquote type="cite">java version "1.7.0_04"<br></blockquote><blockquote type="cite">Java(TM) SE Runtime Environment (build 1.7.0_04-b21)<br></blockquote><blockquote type="cite">Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Ha értő szem megnézi a kódot, akkor láthatja (no meg tapasztalhatja is futtatás közben), hogy ez bizony mindig Double értéket fog visszaadni, akkor is, ha paraméter 'in' Long. Ha megfordítom a feltételt, és persze a feltételes kifejezés két felét is ezzel, illetve ha nem azt vizsgálom, hogy Long-e, hanem azt, hogy Double, akkor is mindig Double értéket akar visszaadni a javap disassembly alapján. Megpróbáltam 1.6.0_33 verziójú Java-val is (nem az összes verziót, annyi türelmem nincs), ott is ugyanaz az eredmény.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Azért mielőtt bugreportot küldenék az ORACLE-nak, megkérdezném a tisztelt társaságot, hogy mit nézek itt nagyon be?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">A workaround megvan, mert a<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">public class Bug{<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;public static Number q(Number in) {<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( in instanceof Long )<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1L; else return 1.0;<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;&nbsp;}<br></blockquote><blockquote type="cite">}<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">működik rendesen.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">--<br></blockquote><blockquote type="cite">Verhás Péter<br></blockquote><blockquote type="cite">peter@verhas.com<br></blockquote><blockquote type="cite">+36(30)9306805<br></blockquote><blockquote type="cite">skype: verhas<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><br><br>-- <br>Üdvözlettel,<br>Böszörményi Péter<br>_______________________________________________<br>Javalist mailing list<br>Javalist@lists.javaforum.hu<br>http://lists.javaforum.hu/mailman/listinfo/javalist<br></div></blockquote></div><br></div></body></html>