This week's book giveaway is in the OCAJP forum.
We're giving away four copies of Programmer's Guide to Java SE 8 Oracle Certified Associate (OCA) and have Khalid A Mughal & Rolf W Rasmussen on-line!
See this thread for details.
Win a copy of Programmer's Guide to Java SE 8 Oracle Certified Associate (OCA) this week in the OCAJP forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

return type problem

 
sambasivarao laghuvarapu
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
class Test {

public static void main(String[] args) {
m1();
}
static byte m1( ) {
final char c1 ='2';
return c1; //line 1
}
static byte m2(final char c2) {
c2='3';
return c2; //line 2
}
}

while i am compiling this code i am getting compiler error at line 2 only.i am not getting compiler error at line 1 why.please help anybody.
 
Jesper de Jong
Java Cowboy
Saloon Keeper
Pie
Posts: 15438
41
Android IntelliJ IDE Java Scala Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Please do not post the same question multiple times.

Note that if you want to edit your post after submitting it, you can do so by clicking the button.
[ September 02, 2007: Message edited by: Jesper Young ]
 
Burkhard Hassel
Ranch Hand
Posts: 1274
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Howdy Sam!

Welcome to the ranch!




I added a little comment to your code

You won't get a compiler error on line 1. char c1 is final and has one value once and for all. The char value of '2' can be converted into an int value of 50. This is a value that fits also into the byte range of a byte.

But you will get an error in line 2. The compiler sees that it gets a value that might have changed.
You should also get an error in the "line in the middle" because you try to change a final variable. But the compiler sees the error in line 2 first and does not report the other one.
If you change line 2 to return 1; (which is a legal return for a byte) then compiler would mark an error in the line in the middle: "final parameter c2 may not be assigned".

If you change the whole method to

Then the former line 2 is also wrong, because you cannot give a char back because it doesn't fit always into a byte.
It does not help now that the char is final. Because you could easily invoke the method with a char value of - say '\u0080' (128, just one too big).



Yours,
Bu.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic