String from char[] with null termination.

K

Kevin Podsiadlik

I'm relatively new to Java programming, and stumbled across this by
accident. Consider this code fragment:

char[] ch = { 'A', 'B', 'C', '\0' };
String s = new String(ch);
System.out.println(s + "DEF");

Should this print out "ABC" or "ABCDEF"?

When I run it from the command line, the output is "ABCDEF". When I
run it via the Eclipse 3.1.0 SDK, however, the output is "ABC". The
java compiler is the same both times, version j2sdk1.4.2_10 on a Red
Hat Linux system. I can understand how either output might logically
result, but not how different results can come from the same compiler.
How might that be happening?
 
C

Chris Smith

Kevin Podsiadlik said:
I'm relatively new to Java programming, and stumbled across this by
accident. Consider this code fragment:

char[] ch = { 'A', 'B', 'C', '\0' };
String s = new String(ch);
System.out.println(s + "DEF");

Should this print out "ABC" or "ABCDEF"?

When I run it from the command line, the output is "ABCDEF". When I
run it via the Eclipse 3.1.0 SDK, however, the output is "ABC". The
java compiler is the same both times, version j2sdk1.4.2_10 on a Red
Hat Linux system. I can understand how either output might logically
result, but not how different results can come from the same compiler.
How might that be happening?

It's not. The two compilers are outputting the same or equivalent code.
What you're seeing is different consoles. The actual result is
"ABC\0DEF". When you test the code from the command line, the console
handles the unprintable character by simply omitting it. Eclipse's
console view handles it by considering it the end of the string and not
printing any more.

There exists no Java specification that defines how the console should
behave in response to bytes sent to stdout. Therefore, either is
equally correct.

--
www.designacourse.com
The Easiest Way To Train Anyone... Anywhere.

Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation
 
R

Roedy Green

When I run it from the command line, the output is "ABCDEF". When I
run it via the Eclipse 3.1.0 SDK, however, the output is "ABC". The
java compiler is the same both times, version j2sdk1.4.2_10 on a Red
Hat Linux system. I can understand how either output might logically
result, but not how different results can come from the same compiler.
How might that be happening?

My guess is Java is sending ABC0DEF to the OS to display. It is the
OS that is being fooled by the 0, since it is written in C.

Whenever you send non-printing chars to the console, all bets are off
on what it will do.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top