1. 程式人生 > >一些JAVA中有趣的面試題

一些JAVA中有趣的面試題

你在 java培訓 計算機 擴展 調用 如果 科學計算 ble 運行

  這幾天的JAVA培訓課上,不斷的喚醒自己對JAVA的理解(時間太長,大學學的快忘幹凈了),其中有一些很有趣的面試題,都是在摳JAVA細節(唉,我是那種見坑就往下跳的人,一做就錯),下面就來分享一下:
  1)用JAVA程序寫出當你在超市購物花費1.1元時,你給收銀員2元錢,收銀員找你0.9元的過程;
  當時一看題目,好簡單啊!迅速寫出:
public class Sell{
  public static void main(String[] args){
    double total = 2.0;
    double used = 1.1;
    double result = total - used;
    System.out.println("result : " + result);
  }
}
結果就悲劇了,因為JAVA中的浮點型運算只得到近似值,運行結果為:0.8999999999999999
為得到精確結果,需要調用JAVA在java.math包中提供的API類BigDecimal。(float和double只能用來做科學計算或者工程計算,在商業計算中要用java.math.BigDecimal)
正確結果為:
import java.math.BigDecimal;

public class Sell1{
  public static void main(String[] args){
    BigDecimal bd1 = new BigDecimal("2.0");
    BigDecimal bd2 = new BigDecimal("1.1");
    System.out.println((double)bd1.subtract(bd2));
  }
}
運行結果:0.9

  2)用強制類型轉換(int)(char)(byte)-1,最後的結果為多少
  當時看到這道題瞬間一楞,後來一想不還是-1嗎,但不確定,就運行了一下,的到的結果為:65535((⊙o⊙)…更蒙了),後來才知道char字符型,存放字符常量,底層使用16位無符號整型表示,而且有符號數采用符號擴展,無符號數采用0擴展(計算機中,數都以補碼的形式存放),所以計算的過程為:
  100000000000000000000001
  111111111111111111111111
  1111,1111 byte
  1111,1111,1111,1111 char
  0000,0000,0000,0000,1111,1111,1111,1111 int
  最後結果為:65536

  3)int a = 1,b = 2,c = 3;
  if(a > b && c++ > b)

  int a = 1,b = 2,c = 3;
  if(a > b & c++ > b)
兩段程序中輸出c值,各為多少?(哈哈,這道題我還知道第一個答案c = 3,第二個就蒙了)原來:

&&:邏輯運算符,具有邏輯短路功能(連接的兩個條件,如果第一個條件為假,後面的條件不進行運算)
&:位運算符,但可以連接連個條件,但沒有短路功能

結果為:第一個c = 3,第二個c = 4

  4)String str1 = ‘a‘ + 3 + "Hello";
    String str2 = "Hello" + ‘a‘ + 3;
  str1,str2輸出的結果為多少?(這回不敢大意了,一定有坑,但想了想,不會啊,還是跳坑吧)
其實“+對String類型是做字符串連接操作”,程序員幾乎都知道,但“char字符型,存放字符常量,底層使用16位無符號整型表示”註意到的人就少了,這道題的結果為:str1 = 100Hello str2 = Helloa3

  現在就這些,以後有的話再更新,JAVA要註重細節啊啊啊啊啊啊啊啊啊!

一些JAVA中有趣的面試題