2016-05-10 3 views
3
public static void main(String[] args) { 
    char[] array = new char[2]; 
    array[0] = 'a'; 
    String s = new String(array); 
    assert s.length() == 2; 
    System.out.print(">" + s + "<\n"); 
    System.out.print(">" + s.substring(1) + "<\n"); 
    System.out.print("end of test.\n"); 
} 

Die Ausgabe lautet:Was passiert, wenn Java das NUL-Zeichen ausgibt?

>a 
> 
end of test 

Im Gegensatz zu C, der Java-String nicht Null-Zeichen beendet ist, also die Behauptung wahr ist. Warum druckt Java das < Begrenzungssymbol nicht?

EDIT: Möglicherweise relevant ist, dass dies in Eclipse 4.5.1 auf Ubuntu 14.04 ist.

+3

Es druckt es für mich aus. Könnte es Ihr Terminal sein, das es verursacht? – resueman

+0

Es funktioniert gut für mich –

+0

Es funktioniert auch für mich – mhyst

Antwort

3

Ich habe Ihren Code in Eclipse getestet und alles scheint funktioniert gut.

Wenn ich jedoch die Ausgabe von der Eclipse-Konsole kopieren und einfügen und sie in einen Texteditor einfügen, fügt sie nur das ein, was Sie bereits erwähnt haben >a.

Ich paste sogar diese >a kopiert/eingefügt von der Eclipse-Konsole (wenn ich sehe >a < ... schaue auf meine Screenshot unten).

Also, habe ich diesen kleinen Code-Schnipsel, um Ihren Code:

String f = " >" + s + "<\n"; 
for (int i=0; i < f.length(); i++) { 
    System.out.println((int)f.charAt(i)); 
} 

Und dies war der ASCII-Codes:

32 
62 
97 
0 
60 
10 

Ich denke, Ihre Konsole hat Konflikt Druck die NUL (oder 0) Charakter. Außerdem habe ich dies unter Windows getestet, so dass es mich nicht überraschen würde, dass Windows Probleme beim Kopieren/Einfügen von Zeichenfolgen mit NUL in der Mitte hat.

Dies ist ein Screenshot von meinem Eclipse und Ausgang: enter image description here

+0

Es ist interessant, dass der nicht druckbare Null Leerraum auf Ihrer Konsole belegt. Das hätte ich nicht erwartet. Auf meiner Konsole gibt es kein Leerzeichen. – H2ONaCl

+0

@ H2ONaCl hat mich auch angesprochen, aber was mich am meisten auf mich aufmerksam gemacht hat, ist das Kopieren und Einfügen des Inhalts in einen Texteditor. Scheint, dass das Klemmbrett mit 'NUL'-Zeichen geborsten ist. –

+0

Ich habe gesehen, dass seltsame Dinge manchmal passieren, wenn' NUL'-Zeichen an Dinge übergeben werden, selbst wenn diese Zeichenfolgen normalerweise null-terminiert sind, da alles nach dem 'NUL' verloren ist Zeichenfolge wird jemals in eine C-Zeichenfolge konvertiert. – NobodyNada

0
>a < 
    > < 
    end of test 

ich Ihre ouput nicht replizieren kann - das ist der Ausgang ich in BlueJay Eclipse bekommen, und NetBeans. Haben Sie dies in verschiedenen IDEs versucht, um zu bestätigen, dass dies jedes Mal passiert?

+0

Wenn es in der Befehlszeile funktioniert, dann mache ich mir keine Sorgen um die IDE. – H2ONaCl

+0

@ H2ONaCl in Ordnung Mann. Prost - gut zu hören, dass es dort funktioniert –

+0

Meine Kommandozeile druckt '> a <'. Nicht genau das Gleiche wie deines. – H2ONaCl

Verwandte Themen