e para complementar…

public class GFC218
{
	static void m(double x)
	{
		System.out.print("double");
	}
	static void m(float x)
	{
		System.out.print("float");
	}
	public static void main(String[] args)
	{
		m(1);
		m(1.2);
		m(1.2f);
	}
}

Na 1 letra a
e na 2 double, double, float

Na 1 String
Na 2 Float,Double e Float

Imprime String, pq a JVM vai procurar pelo metodo q tem a assinatura mais especifica
E entre Object e String, para null, String eh mais especifico

[quote=“New__Radical”]Mais ou menos Solum.

Ta certo, a JVM procura pelo objeto mais específico para passar um objeto para um método.

Mas entre String e StringBuffer, a JVM não sabe qual o Objeto mais específico. E assim, da erro de compilação.[/quote]
eu tava falando do codigo do cara la em cima hehhee. o primeiro
em relacao a String e StringBuffer, eu concordo

Pq null eh mais específico para String?

alguem sabe?

…e nesse caso, o que acontece? :slight_smile:

O que vocês me dizem dessa!?!? :?

class GFC218 { static void m(Object x) {System.out.print("Object");} static void m(String x) {System.out.print("String");} public static void main(String[] args) { m(null); }}

What is the result of attempting to compile and run the program?

a. Prints: Object
b. Prints: String
c. Compile-time error
d. Run-time error
e. None of the above

É isso ae Ironlynx!!!
Na primeira a saída será String.

ricardolecheta, acho que a resposta é: float double float.

E agora???

class GFC218 { static void m(Object x) {System.out.print("Object");} static void m(String x) {System.out.print("String");} static void m(StringBuffer x) {System.out.print("StringBuffer");} public static void main(String[] args) { m(null); }}

O que acontece???

Mais ou menos Solum.

Ta certo, a JVM procura pelo objeto mais específico para passar um objeto para um método.

Mas entre String e StringBuffer, a JVM não sabe qual o Objeto mais específico. E assim, da erro de compilação.

Não é que null é mais específico para String.
String que é mais específico do que Object, pois String extende a Object.

E no caso de String e StringBuffer, todas as 2 extendem a Object, e a VM não sabe qual é o mais específico.

No seguinte código:

class A{}
class B extends A{}
class C extends B{}
class D {
   public static void main(String args[])
      D d1 = new D();
      d1.m(null);
   }
   void m(A a){ System.out.println("A"); }
   void m(B b){ System.out.println("B"); }
   void m(C c){ System.out.println("C"); }
}

O que vai ser impresso é “C”, porque a classe C é mais específico que do que as class A e B.

Sacou???

Nesse caso da TILT!!!

O compilador não sabe pra que método mandar o null.