Hallo Leute, ich habs mir jetzt doch angetan und Sun's J2SDK von 1.3.1 auf 1.4.1 updated. Geht das nur mir so, oder hat Sun da eher miese Arbeit abgeliefert? 1. Umlaute aus der MySQL-Datenbank kommen nicht mehr richtig (Update von mm.mysql auf mysql-connector-java hat zwar das Problem behoben, aber komisch ist es schon 2. Simple if/else Konstruktionen klappen nicht mehr, wenn im if-Zweig nichts steht, sprich if( was auch immer ); else { tu was; } funktioniert nicht (er kommt nie in den else-Zweig), sobald ich aber if( was auch immer ) { mach da auch was; } else { tu was; } also was in den if-Zweig reinstelle, geht es einwandfrei. Funktioniert das nur bei mir nicht? Ok, bin jetzt erst mal beim umschreiben all meiner Servlets... -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
Hallo, On Sun, 12 Jan 2003 at 20:16 (+0100), Manfred Tremmel wrote:
2. Simple if/else Konstruktionen klappen nicht mehr, wenn im if-Zweig nichts steht, sprich
if( was auch immer ); else { tu was; }
==== Test.java ===================== public class Test { public static void main (String[] args) { if( args.length <= 1 ); else { System.out.println("Mehr als ein Argument übergeben!"); } } } ==================================== $ java Test $ java Test 2 $ java Test 2 3 Mehr als ein Argument übergeben! $ java Test 2 3 5 Mehr als ein Argument übergeben! $ java -version java version "1.4.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01) Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode) Ich will ja nichts sagen, aber wie kommt man auf solchen Code? Ich würde halt einfach if ( !( was auch immer) ) { tu was; } schreiben. Aber funktionieren müsste es natürlich weil es sich ja nach dem if () ein Semikolon, also genau eine (leere) Anweisung steht so wie es gefordert wird. Und hier funktioniert es auch. BTW: SuSE 7.2. Gruß, Bernhard -- "Wenn ein Politiker stirbt, kommen viele zur Beerdigung nur deshalb, um sicher zu sein, dass man ihn wirklich begräbt." -- Georges Clemenceau
Am Sonntag, 12. Januar 2003 21:21 schrieb Bernhard Walle:
$ java Test $ java Test 2 $ java Test 2 3 Mehr als ein Argument übergeben! $ java Test 2 3 5 Mehr als ein Argument übergeben!
Hm, komisch.
$ java -version java version "1.4.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01) Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
Noch komischer, hab exakt die selbe version, mit exakt der gleichen Ausgabe.
Ich will ja nichts sagen, aber wie kommt man auf solchen Code? Ich
Ganz einfach, weil mir der Chef in der Ausbildung erklärt hat, dass wir kein ungleich verwenden sollen. Kostet jede Menge Performance, meinte er (ok, PL/I mit IBM 3270 Großrechner, aber prägt sich halt ein).
würde halt einfach
if ( !( was auch immer) ) { tu was; }
Hab ich auch gemacht, damit läuft auch alles. Konkret gehts um ne Suchmaske, in der zig Felder zur Verfügung stehen, aber nicht alle eingetippt werden, ich hab die dann eben abgefragt: ... // Suche nach Namen SuchString = req.getParameter("such_nachname"); if( SuchString == null || SuchString.equals("")); else { if(SQLWhere == null) SQLWhere = "WHERE "; else SQLWhere += " AND "; SQLWhere += de.KnightSoft.Allgemein.StringToSQL.SuchString("tl.Name", SuchString); } ... Es blieb SQLWhere leer bis zum Schluss, und ich hab nichts als ne SQL-Exception geernted. Obwohl definitiv SuchString gefüllt war (habs ausgegeben), der else-Zweig wurde auch nie betreten (JDK 1.1.8 - 1.3.1 lief es problemlos). Habs dann natürlich geändert: ... // Suche nach Namen SuchString = req.getParameter("such_nachname"); if( !(SuchString == null || SuchString.equals(""))) { if(SQLWhere == null) SQLWhere = "WHERE "; else SQLWhere += " AND "; SQLWhere += de.KnightSoft.Allgemein.StringToSQL.SuchString("tl.Name", SuchString); } ... So funktionierts (Zeilenumbruch wegdenken).
schreiben. Aber funktionieren müsste es natürlich weil es sich ja nach dem if () ein Semikolon, also genau eine (leere) Anweisung steht so wie es gefordert wird. Und hier funktioniert es auch. BTW: SuSE 7.2.
Naja, SuSE 8.1, RPM selber gebastelt aus dem tar-File. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
Moin,
* Manfred Tremmel
Am Sonntag, 12. Januar 2003 21:21 schrieb Bernhard Walle:
Ich will ja nichts sagen, aber wie kommt man auf solchen Code? Ich
Ganz einfach, weil mir der Chef in der Ausbildung erklärt hat, dass wir kein ungleich verwenden sollen. Kostet jede Menge Performance, meinte er (ok, PL/I mit IBM 3270 Großrechner, aber prägt sich halt ein).
Oha. Zunächst mal geht's um NOT, nicht um ungleich. Zweitens kann ich mir wenig vorstellen, das schneller als ein NOT ist, und ein ungleich ist schlimmstenfalls ein NOT (x == y). Thorsten -- The smart way to keep people passive and obedient is to strictly limit the spectrum of acceptable opinion, but allow very lively debate within that spectrum. - Noam Chomsky
Am Sonntag, 12. Januar 2003 22:37 schrieb Thorsten Haude:
Oha. Zunächst mal geht's um NOT, nicht um ungleich. Zweitens kann ich mir wenig vorstellen, das schneller als ein NOT ist, und ein ungleich ist schlimmstenfalls ein NOT (x == y).
Ok, NOT, sorry. Ich habs auch nie nachgeprüft, und die Architektur ist hier ganz was anderes, ich weiß ja, aber es ist halt so drin im Hinterkopf. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
Hallo, On Sun, 12 Jan 2003, Manfred Tremmel wrote:
Ich will ja nichts sagen, aber wie kommt man auf solchen Code? Ich
Ganz einfach, weil mir der Chef in der Ausbildung erklärt hat, dass wir kein ungleich verwenden sollen. Kostet jede Menge Performance, meinte er (ok, PL/I mit IBM 3270 Großrechner, aber prägt sich halt ein).
*ROTFL* Als ob sowas noch ne Rolle spielen wuerde, wenn man Java verwendet... Wenn man handoptimierten Assembler schreibt, ja, dann mag man vielleicht mal einen Gedanken daran verschwenden... -dnh -- Warning: Some of my best mistakes are yet to be made.
Hi
Ich will ja nichts sagen, aber wie kommt man auf solchen Code? Ich
Ganz einfach, weil mir der Chef in der Ausbildung erklärt hat, dass wir kein ungleich verwenden sollen. Kostet jede Menge Performance, meinte er (ok, PL/I mit IBM 3270 Großrechner, aber prägt sich halt ein).
Ich weiss nicht, ob Dein Chef da bezueglich PL1 Recht hatte, aber bei Java ergibt die lesbarere Version (mit Negation der Bedingung) einen kuerzeren Bytecode (der auch tatsaechlich drei Befehle weniger enthaelt). Auch eine Zeitmessung spricht dafuer. Es ist halt doch ein Unterschied zwischen einer 20 Jahre alten Meinung und einem aktuellen Test (-; Interessant ist auch: Beim decompilieren mittels Mocca kommen beide Versionen auf denselben Source-Code raus. Bye class test { public static void main( String[] args ) { int a = 1; int b = 110000; long time = System.currentTimeMillis(); for ( int i = 0; i < 1000000000; i++ ) { if( !( a == 2 ) ) { a = 3; } } System.out.println( System.currentTimeMillis() - time ); time = System.currentTimeMillis(); for ( int i = 0; i < 1000000000; i++ ) { if ( b == 2 ); else { b = 3; } } System.out.println( System.currentTimeMillis() - time ); } } -- | Bodo Kaelberer | http://www.webkind.de/ | http://www.mehr-demokratie-wagen.de/ ---- | Haben oder Nichts sein
Hallo, On Sun, 12 Jan 2003, Manfred Tremmel wrote:
2. Simple if/else Konstruktionen klappen nicht mehr, wenn im if-Zweig nichts steht, sprich
if( was auch immer ); else { tu was; }
funktioniert nicht (er kommt nie in den else-Zweig), sobald ich aber
Teste mal: if( was auch immer ) { ; } else { tu was; } -dnh -- Yea, tho I walk thru the valley of the shadow of clues, I shall fear no luser, for Thou lart with me, Thy chicken and Thy manual, they comfort me. -- Dave Aronson
Am Sonntag, 12. Januar 2003 21:29 schrieb David Haller:
Teste mal:
if( was auch immer ) { ; } else { tu was; }
Hab mir jetzt ein eigenes kleines Testprogramm geschrieben (liegt bei), der Fehler ist dort nicht rekonstruierbar. Ist wohl irgend eine ganz spezielle Konstellation in dem Servlet. Besten dank an alle die mitgeforscht haben. Ich übergeb den Fall an Mulder und Scully. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
Moin Moin, Am Sonntag, 12. Januar 2003 20:16 schrieb Manfred Tremmel:
2. Simple if/else Konstruktionen klappen nicht mehr, wenn im if-Zweig nichts steht, sprich
if( was auch immer );
Es ist ein BUG, wenn es funktioniert! ;))) Mit dem ";" wird IMHO das Ende der If-Abfrage gekennzeichnet. if( bool) myObj.mach(); Ist das selbe wie die obige, zu dieser Abfrage gibt es kein "else"...
else { tu was; }
Und eine einzelner else-Zweig macht wenig Sinn...
funktioniert nicht (er kommt nie in den else-Zweig), sobald
Besser so ;))) Bye Andre
On Mon, 13 Jan 2003 at 19:39 (+0100), Andre Heine wrote:
Am Sonntag, 12. Januar 2003 20:16 schrieb Manfred Tremmel:
2. Simple if/else Konstruktionen klappen nicht mehr, wenn im if-Zweig nichts steht, sprich
if( was auch immer );
Es ist ein BUG, wenn es funktioniert! ;)))
Mit dem ";" wird IMHO das Ende der If-Abfrage gekennzeichnet.
if( bool) myObj.mach();
Ist das selbe wie die obige, zu dieser Abfrage gibt es kein "else"...
Sagt wer? Nach Deiner Definition wäer if (bool) System.out.println("True"); else System.out.println("False"); kein korrekter Java-Code; korrekt wäre hingegen if (bool) { System.out.println("True"); } else { System.out.println("False"); } Kann ich mir nicht vorstellen, die geschweiften Klammern kennzeichen ja nur einen Block, um mehrere Anweisungen zusammenzufassen. Ein Block ist ja auch nur eine Anweisung. Gruß, Bernhard -- "Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat." -- Winston Churchill
Hi Bernhard, Am Montag, 13. Januar 2003 20:05 schrieb Bernhard Walle:
On Mon, 13 Jan 2003 at 19:39 (+0100), Andre Heine wrote:
Mit dem ";" wird IMHO das Ende der If-Abfrage gekennzeichnet.
if( bool) myObj.mach();
Ist das selbe wie die obige, zu dieser Abfrage gibt es kein "else"...
Sagt wer? Nach Deiner Definition wäer if (bool) System.out.println("True"); else System.out.println("False");
Du hast Recht, da habe ich mich voll verhauen. *duck* Ich habe da etwas durcheinander gewürfelt ... if (1<2) foo(); bar(); "bar();" gehört nicht mehr zu if ... Bye Andre
participants (6)
-
Andre Heine
-
Bernhard Walle
-
Bodo Kaelberer
-
David Haller
-
Manfred Tremmel
-
Thorsten Haude