File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes JQ+ question Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "JQ+ question" Watch "JQ+ question" New topic

JQ+ question

Ranch Hand

Joined: Nov 22, 2008
Posts: 18944
I am a little confused...on one of the explanations on a JQ+
question it stated that a char value can be assigned to an int variable: i = c; //valid
But cannot assign an int to a char:
c = i;//invalid
However, I saw on another question where a int was assigned to a char value, and it was a valid answer. Can anyone clear this up for me?
Cindy Glass
"The Hood"

Joined: Sep 29, 2000
Posts: 8521
It works if the int is final. That causes the int to become a constant and the compiler knows FOR SURE that it will always FIT into the char.

"JavaRanch, where the deer and the Certified play" - David O'Meara
Priya Chetlur

Joined: Feb 20, 2001
Posts: 20
Hi Marc,
The rules applicable for the conversions here in your example are:
1) Conversions from char to int are always valid as they are widening conversions.
2) Conversions from int to char obviously require an cast as they are narrowing conversions.
3) Implicit narrowing conversions occurs from int to char in two cases:
--> When the int literal is in the range of the char (0 to 65535)
--> If the int variable is declared as final and its value is in the range of char (0 to 65535).
int i=100;
final int j=200;
char c='c';
i=c; //valid - widening conversion
//c=i; //compile error - requires cast as it is narrowing conversion
c=100; //valid - implicit conversion of the int literal 100 to char
c=j; //valid - j is a final variable
Hope this helps,
Ranch Hand

Joined: Nov 22, 2008
Posts: 18944
Thanks guys...cleared things up : )
I agree. Here's the link:
subject: JQ+ question
It's not a secret anymore!