title: Java calling overloaded methods
body: <p>Consider this code segment</p>
  
  <pre><code>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; 
     } 
  }
  </code></pre>
  
  <p>If I execute this lines of code,</p>
  
  <pre><code>StockServer a = new StockServer("",2,2.0,2);
  byte b=5;
  a.buy(b,2);
  </code></pre>
  
  <p>The results would be :  buy(int,double)</p>
  
  <p>I want to know how the compiler decide which method to execute?</p>