short x = 7;
And C# would allow this:
class Alien
{
internal string invade(short ships) { return "a few"; }
internal string invade(params short[] ships) { return "many"; }
}
class Program
{
public static void Main(string[] args)
{
short x = 7;
System.Console.WriteLine(new Alien().invade(7));
}
}
C#'s output:
a few
Java does not allow this:
class Alien
{
String invade(short ships) { return "a few"; }
String invade(short... ships) { return "many"; }
}
class Main
{
public static void main(String[] args)
{
short x = 7;
System.out.println(new Alien().invade(7));
}
}
As Java decided that 7 is an int when being passed to a method, and there's no matching method that accepts an int, hence the above code will not compile
Compilation error:
Main.java:13: cannot find symbol
symbol : method invade(int)
location: class Alien
System.out.println(new Alien().invade(7));
^
1 error
Java lacks symmetry here. 7 can be assigned to short, but it cannot be passed to short. Might be by design, think component versioning issue. To fix the above problem. cast 7 to short:
System.out.println(new Alien().invade((short)7));
Output:
a few
Java is the odd one out, this would compile in C++:
#include <iostream>
using namespace std;
class Alien
{
public: char* invade(short ships) { return "a few"; }
};
int main()
{
printf( (new Alien())->invade(7) );
return 0;
}
No comments:
Post a Comment