熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java的造型運算符

2013-11-15 11:44:30  來源: JSP教程 

  造型(Cast)的作用是與一個模型匹配在適當的時候Java會將一種數據類型自動轉換成另一種例如假設我們為浮點變量分配一個整數值計算機會將int自動轉換成float通過造型我們可明確設置這種類型的轉換或者在一般沒有可能進行的時候強迫它進行
  為進行一次造型要將括號中希望的數據類型(包括所有修改符)置於其他任何值的左側下面是一個例子
  void casts() {
  int i = ;
  long l = (long)i;
  long l = (long);
  }
  正如您看到的那樣既可對一個數值進行造型處理亦可對一個變量進行造型處理但在這兒展示的兩種情況下造型均是多余的因為編譯器在必要的時候會自動進行int值到long值的轉換當然仍然可以設置一個造型提醒自己留意也使程序更清楚在其他情況下造型只有在代碼編譯時才顯出重要性
  在C和C++中造型有時會讓人頭痛在Java裡造型則是一種比較安全的操作但是若進行一種名為縮小轉換(Narrowing Conversion)的操作(也就是說腳本是能容納更多信息的數據類型將其轉換成容量較小的類型)此時就可能面臨信息丟失的危險此時編譯器會強迫我們進行造型就好象說這可能是一件危險的事情——如果您想讓我不顧一切地做那麼對不起請明確造型而對於放大轉換(Widening conversion)則不必進行明確造型因為新類型肯定能容納原來類型的信息不會造成任何信息的丟失
  Java允許我們將任何主類型造型為其他任何一種主類型但布爾值(bollean)要除外後者根本不允許進行任何造型處理不允許進行造型為了將一種類轉換成另一種必須采用特殊的方法(字串是一種特殊的情況本書後面會講到將對象造型到一個類型家族例如橡樹可造型為反之亦然但對於其他外來類型巖石則不能造型為
   字面值
  最開始的時候若在一個程序裡插入字面值(Literal)編譯器通常能准確知道要生成什麼樣的類型但在有些時候對於類型卻是暧昧不清的若發生這種情況必須對編譯器加以適當的指導方法是用與字面值關聯的字符形式加入一些額外的信息下面這段代碼向大家展示了這些字符
  //: Literalsjava
  class Literals {
   char c = xffff; // max char hex value
   byte b = xf; // max byte hex value
   short s = xfff; // max short hex value
   int i = xf; // Hexadecimal (lowercase)
   int i = XF; // Hexadecimal (uppercase)
   int i = ; // Octal (leading zero)
   // Hex and Oct also work with long
   long n = L; // long suffix
   long n = l; // long suffix
   long n = ;
   //! long l(); // not allowed
   float f = ;
   float f = F; // float suffix
   float f = f; // float suffix
   float f = ef; // to the power
   float f = e+f; // float suffix
   double d = d; // double suffix
   double d = D; // double suffix
   double d = ed; // to the power
  } ///:~
  十六進制(Base )——它適用於所有整數數據類型——用一個前置的x或X指示並在後面跟隨采用大寫或小寫形式的以及af若試圖將一個變量初始化成超出自身能力的一個值(無論這個值的數值形式如何)編譯器就會向我們報告一條出錯消息注意在上述代碼中最大的十六進制值只會在charbyte以及short身上出現若超出這一限制編譯器會將值自動變成一個int並告訴我們需要對這一次賦值進行縮小造型這樣一來我們就可清楚獲知自己已超載了邊界
  八進制(Base )是用數字中的一個前置以及的數位指示的在CC++或者Java中對二進制數字沒有相應的字面表示方法
  字面值後的尾隨字符標志著它的類型若為大寫或小寫的L代表long大寫或小寫的F代表float大寫或小寫的D則代表double
  指數總是采用一種我們認為很不直觀的記號方法ef在科學與工程學領域e代表自然對數的基數約等於(Java一種更精確的double值采用MathE的形式)它在象×e的次方這樣的指數表達式中使用意味著×次方然而自FORTRAN語言發明後人們自然而然地覺得e代表多少次冪這種做法顯得頗為古怪因為FORTRAN最初面向的是科學與工程設計領域理所當然它的設計者應對這樣的混淆概念持謹慎態度(注釋①)但不管怎樣這種特別的表達方法在CC++以及現在的Java中頑固地保留下來了所以倘若您習慣將e作為自然對數的基數使用那麼在Java中看到象ef這樣的表達式時請轉換您的思維從程序設計的角度思考它它真正的含義是×次方
  ①John Kirkham這樣寫道我最早於年在一部IBM 機器上使用FORTRAN II那時——包括年代以及年代的早期FORTRAN一直都是使用大寫字母之所以會出現這一情況可能是由於早期的輸入設備大多是老式電傳打字機使用位Baudot碼那種碼並不具備小寫能力乘冪表達式中的E也肯定是大寫的所以不會與自然對數的基數e發生沖突後者必然是小寫的E這個字母的含義其實很簡單就是Exponential的意思指數冪數代表計算系統的基數——一般都是當時八進制也在程序員中廣泛使用盡管我自己未看到它的使用但假若我在乘冪表達式中看到一個八進制數字就會把它認作Base 我記得第一次看到用小寫e表示指數是在年代末期我當時也覺得它極易產生混淆所以說這個問題完全是自己潛入FORTRAN裡去的並非一開始就有如果你真的想使用自然對數的基數實際有現成的函數可供利用但它們都是大寫的
  注意如果編譯器能夠正確地識別類型就不必使用尾隨字符對於下述語句
  long n = ;
  它並不存在含混不清的地方所以後面的一個L大可省去然而對於下述語句
  float f = ef; //的冪數
  編譯器通常會將指數作為雙精度數(double)處理所以假如沒有這個尾隨的f就會收到一條出錯提示告訴我們須用一個造型將double轉換成float
   轉型
  大家會發現假若對主數據類型執行任何算術或按位運算只要它們比int小(即charbyte或者short)那麼在正式執行運算之前那些值會自動轉換成int這樣一來最終生成的值就是int類型所以只要把一個值賦回較小的類型就必須使用造型此外由於是將值賦回給較小的類型所以可能出現信息丟失的情況)通常表達式中最大的數據類型是決定了表達式最終結果大小的那個類型若將一個float值與一個double值相乘結果就是double如將一個int和一個long值相加則結果為long

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19534.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.