2016-04-05 6 views
4

Ich kam in den folgenden Code gestern im source code of Jasper's JspRuntimeLibrary:JspRuntimeLibrary: „Dieser Trick vermeidet Flucht issues“

public static char coerceToChar(String s) { 
    if (s == null || s.length() == 0) { 
    return (char) 0; 
    } else { 
    // this trick avoids escaping issues 
    return (char)(int) s.charAt(0); 
    } 
} 

ich diesen Kommentar fasziniert bin - was sind die Flucht Probleme, dass dieser „Trick“ vermeidet?

+0

Vertraue keiner Bibliothek, die Code wie 'Double.valueOf (s) .doubleValue()' hat. – shmosel

+2

Vielleicht finden Sie etwas Interessantes in den Kommentaren dieses Commits: http://osdir.com/ml/dev-tomcat.apache.org/2012-11/msg00123.html – Berger

+0

@Berger yep, das ist im Grunde, was ich dachte - dass es ist überflüssig. Es scheint, als ob die Änderung nicht weit integriert war (zB [nicht hier] (https://java.net/projects/jsp/sources/svn/content/trunk/impl/src/main/java/org/apache/ jasper/runtime/JspRuntimeLibrary.java)). Möchten Sie eine kurze Antwort schreiben? –

Antwort

3

Von diesem Link auf Kommentare zu dem Commit Entfernen dieses "Tricks": Re: svn commit: r1406384

Die (char) (int) Trick wäre sinnvoll, wenn die ursprünglichen Daten ein Byte sind oder ein int. Es macht keinen Sinn, wenn die Originaldaten ein Zeichen sind.

Für ein Byte ist der Trick erforderlich, um das Zeichen loszuwerden (für ein ISO-8859-1 Zeichen im Bereich 128-255).

Es scheint, als ob der Trick für ein Zeichen nicht relevant war, daher wurde es entfernt.

+1

Ich vermutete, dass der Kommentar eine [Fermat-like] (http://fermatslasttheorem.blogspot.co.uk/2005/05/problem.html) Qualität hatte. Danke für die Information. –