Consider this code segment
class StockServer { 
   StockServer(String company, int Shares,double currentPrice, double cashOnHand) {}
   double buy(int numberOfShares, double pricePerShare) { 
        System.out.println("buy(int,double)"); 
        return 3.0;
   } 
   float buy(long numberOfShares, double pricePerShare) {     
        System.out.println("buy(long,double)");
        return 3.0f; 
   } 
}
If I execute this lines of code,
StockServer a = new StockServer("",2,2.0,2);
byte b=5;
a.buy(b,2);
The results would be : buy(int,double)
I want to know how the compiler decide which method to execute?