Incrementing Char Type In Java

2019-01-15 12:13发布

问题:

While practicing Java I randomly came up with this:

class test
{
    public static void main(String arg[])
    {
        char x='A';
        x=x+1;
        System.out.println(x);
    }
}

I thought it will throw an error because we can't add the numeric value 1 to the letter A in mathematics, but the following program runs correctly and prints

B 

How is that possible?

回答1:

In Java, char is a numeric type. When you add 1 to a char, you get to the next unicode code point. In case of 'A', the next code point is 'B':

char x='A';
x+=1;
System.out.println(x);

Note that you cannot use x=x+1 because it causes an implicit narrowing conversion. You need to use either x++ or x+=1 instead.



回答2:

A char is in fact mapped to an int, look at the Ascii Table.

For example: a capital A corresponds to the decimal number 65. When you are adding 1 to that char, you basicly increment the decimal number by 1. So the number becomes 66, which corresponds to the capital B.



回答3:

char is a numeric type (2 bytes long), and is also the only unsigned numeric primitive type in Java.

You can also do:

int foo = 'A';

What is special here is that you initialize the char with a character constant instead of a number. What is also special about it is its string representation, as you could witness. You can use Character.digit(c, 10) to get its numeric value (as an int, since 2 ^ 16 - 1 is not representable by a short!).



回答4:

This is the equivalent program of your program:

public class Tester {
    public static void main(String args[]){
             char start='\u0041';
             char next='\u0041'+1;
             System.out.println(next);
    }
}

But as you see, next=start+1, will not work. That's the way java handles.

The reason could be that we may accidentally use start, with integer 1 thinking that start is an int variables and use that expression. Since, java is so strict about minimizing logical errors. They designed it that way I think.

But, when you do, char next='\u0041'+1; it's clear that '\u0041' is a character and 1 will be implicitly converted into a 2 byte. This no mistake could be done by a programmer. May be that's the reason they have allowed it.

char is 2 bytes in java. char supports unicode characters. When you add or subtract a char var with an offset integer, the equivalent unicode character in the unicode table will result. Since, B is next to A, you got B.



回答5:

A char in Java is just an integer number, so it's ok to increment/decrement it. Each char number has a corresponding value, an interpretation of it as a character, by virtue of a conversion table: be it the ASCII encoding, or the UTF-8 encoding, etc.

Come to think of it, every data in a computer - images, music, programs, etc. are just numbers. A simple character is no exception, it's encoded or codified as a number, too.



回答6:

char are stored as 2 byte unicode values in Java. So if char x = 'A', it means that A is stored in the unicode format. And in unicode format, every character is represented as an integer. So when you say x= x+1, it actually increments the unicode value of the A, which prints B.



回答7:

you have to type cast the result after adding using parenthesis like this:

x='A';
x = (char) (x+1);

else you will get loose of data error.



回答8:

Because type char effectively works like a 16-bit unsigned int.

So setting char x='A' is almost equivalent to int x=65 When you add one; you get 66; or ASCII 'B'.



回答9:

Each char has a character code. The computer sees a character as an unsigned number, so you can increment it.



标签: java char