鍍金池/ 教程/ Java/ 基本類型與運算符
Struts2
Java 泛型
排序算法
Java 內(nèi)存管理
Webservice
Spring
輸入輸出流
Socket
字符串與數(shù)組
面向?qū)ο缶幊?/span>
海量數(shù)據(jù)處理
Hibernate
Netty
基本類型與運算符
常見設計模式
Java 虛擬機
Java 多線程
JDBC
搭建 Java 開發(fā)環(huán)境
Java 數(shù)據(jù)庫操作
異常處理
集合類
Servlet 與 JSP

基本類型與運算符

Java 基本數(shù)據(jù)類型

java 基本類型 作者:臧圩人

基本類型,或者叫做內(nèi)置類型,是 JAVA 中不同于類的特殊類型。它們是我們編程中使用最頻繁的類型,因此面試題中也總少不了它們的身影,在這篇文章中我們將從面試中??嫉膸讉€方面來回顧一下與基本類型相關的知識。

基本類型共有八種,它們分別都有相對應的包裝類。關于它們的詳細信息請看下表:

基本類型可以分為三類,字符類型 char,布爾類型 boolean 以及數(shù)值類型 byte、short、int、long、float、double。數(shù)值類型又可以分為整數(shù)類型 byte、short、int、long 和浮點數(shù)類型 float、double。JAVA 中的數(shù)值類型不存在無符號的,它們的取值范圍是固定的,不會隨著機器硬件環(huán)境或者操作系統(tǒng)的改變而改變。實際上,JAVA 中還存在另外一種基本類型 void,它也有對應的包裝類 java.lang.Void,不過我們無法直接對它們進行操作。對于數(shù)值類型的基本類型的取值范圍,我們無需強制去記憶,因為它們的值都已經(jīng)以常量的形式定義在對應的包裝類中了。請看下面的例子:

Java代碼

public class PrimitiveTypeTest {  
    public static void main(String[] args) {  
        // byte  
        System.out.println("基本類型:byte 二進制位數(shù):" + Byte.SIZE);  
        System.out.println("包裝類:java.lang.Byte");  
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);  
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);  
        System.out.println();  

        // short  
        System.out.println("基本類型:short 二進制位數(shù):" + Short.SIZE);  
        System.out.println("包裝類:java.lang.Short");  
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);  
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);  
        System.out.println();  

        // int  
        System.out.println("基本類型:int 二進制位數(shù):" + Integer.SIZE);  
        System.out.println("包裝類:java.lang.Integer");  
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);  
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);  
        System.out.println();  

        // long  
        System.out.println("基本類型:long 二進制位數(shù):" + Long.SIZE);  
        System.out.println("包裝類:java.lang.Long");  
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);  
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);  
        System.out.println();  

        // float  
        System.out.println("基本類型:float 二進制位數(shù):" + Float.SIZE);  
        System.out.println("包裝類:java.lang.Float");  
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);  
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);  
        System.out.println();  

        // double  
        System.out.println("基本類型:double 二進制位數(shù):" + Double.SIZE);  
        System.out.println("包裝類:java.lang.Double");  
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);  
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);  
        System.out.println();  

        // char  
        System.out.println("基本類型:char 二進制位數(shù):" + Character.SIZE);  
        System.out.println("包裝類:java.lang.Character");  
        // 以數(shù)值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺  
        System.out.println("最小值:Character.MIN_VALUE="  
                + (int) Character.MIN_VALUE);  
        // 以數(shù)值形式而不是字符形式將Character.MAX_VALUE輸出到控制臺  
        System.out.println("最大值:Character.MAX_VALUE="  
                + (int) Character.MAX_VALUE);  
    }  
}  

運行結(jié)果:

  • 基本類型:byte 二進制位數(shù):8
  • 包裝類:java.lang.Byte
  • 最小值:Byte.MIN_VALUE=-128
  • 最大值:Byte.MAX_VALUE=127

  • 基本類型:short 二進制位數(shù):16
  • 包裝類:java.lang.Short
  • 最小值:Short.MIN_VALUE=-32768
  • 最大值:Short.MAX_VALUE=32767

  • 基本類型:int 二進制位數(shù):32
  • 包裝類:java.lang.Integer
  • 最小值:Integer.MIN_VALUE=-2147483648
  • 最大值:Integer.MAX_VALUE=2147483647

  • 基本類型:long 二進制位數(shù):64
  • 包裝類:java.lang.Long
  • 最小值:Long.MIN_VALUE=-9223372036854775808
  • 最大值:Long.MAX_VALUE=9223372036854775807

  • 基本類型:float 二進制位數(shù):32
  • 包裝類:java.lang.Float
  • 最小值:Float.MIN_VALUE=1.4E-45
  • 最大值:Float.MAX_VALUE=3.4028235E38

  • 基本類型:double 二進制位數(shù):64
  • 包裝類:java.lang.Double
  • 最小值:Double.MIN_VALUE=4.9E-324
  • 最大值:Double.MAX_VALUE=1.7976931348623157E308

  • 基本類型:char 二進制位數(shù):16
  • 包裝類:java.lang.Character
  • 最小值:Character.MIN_VALUE=0
  • 最大值:Character.MAX_VALUE=65535

Float 和 Double 的最小值和最大值都是以科學記數(shù)法的形式輸出的,結(jié)尾的“E+數(shù)字”表示 E 之前的數(shù)字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

大家將運行結(jié)果與上表信息仔細比較就會發(fā)現(xiàn) float、double 兩種類型的最小值與Float.MIN_VALUE、 Double.MIN_VALUE 的值并不相同,這是為什么呢?實際上Float.MIN_VALUE 和 Double.MIN_VALUE 分別指的是 float 和 double 類型所能表示的最小正數(shù)。也就是說存在這樣一種情況,0到 ±Float.MIN_VALUE 之間的值 float 類型無法表示,0 到 ±Double.MIN_VALUE 之間的值 double 類型無法表示。這并沒有什么好奇怪的,因為這些范圍內(nèi)的數(shù)值超出了它們的精度范圍。

基本類型存儲在棧中,因此它們的存取速度要快于存儲在堆中的對應包裝類的實例對象。從 Java5.0(1.5)開始,JAVA 虛擬機(Java Virtual Machine)可以完成基本類型和它們對應包裝類之間的自動轉(zhuǎn)換。因此我們在賦值、參數(shù)傳遞以及數(shù)學運算的時候像使用基本類型一樣使用它們的包裝類,但這并不意味著你可以通過基本類型調(diào)用它們的包裝類才具有的方法。另外,所有基本類型(包括 void)的包裝類都使用了 final 修飾,因此我們無法繼承它們擴展新的類,也無法重寫它們的任何方法。

JAVA 基礎之 java 運算符大百科

運算符用于執(zhí)行程序代碼運算,會針對一個以上操作數(shù)項目來進行運算。下面介紹 JAVA 中的運算符。

一、算術運算符: 單目:+(取正)-(取負) ++(自增1) - -(自減1) 雙目:+ - * / %(取余) 三目:a>b?true:false 說明:當 a 大于 b 的時候,為 true(也就是冒號之前的值),否則為false;這整個運算符包括一個關系運算符(可以是">""<""!="等等),一個"?",一個":",冒號前后需要有兩個表達式或者是值或者是對象。

二、關系運算: 等于符號:==,不等于符號: != ,大于符號:>, 小于符號:<,大于等于符號: >= ,小于等于符號: <= .

三、位運算符 邏輯運算符: 位運算符 與(&)、非(~)、或(|)、異或(^)&:當兩邊操作數(shù)的位同時為1時,結(jié)果為1,否則為0.如1100&1010=1000 | :當兩邊操作數(shù)的位有一邊為1時,結(jié)果為0,否則為1.如1100|1010=1110 ~:0變1,1變0 ^:兩邊的位不同時,結(jié)果為1,否則為0.如1100^1010=0110 邏輯運算符 與(&&)、非(?。⒒颍▅|)

四、賦值運算符 = += -= *= /= %= &= ^= |= 《= 》=

五、instanceof 運算符 該運算符是雙目運算符,左面的操作元是一個對象,右面是一個類。當左面的對象是右面的類創(chuàng)建的對象時,該運算符運算結(jié)果是 true,否則是 false.

六、 運算符綜述 Java 的表達式就是用運算符連接起來的符合 Java 規(guī)則的式子。運算符的優(yōu)先級決定了表達式中運算執(zhí)行的先后順序。例如,x<y&&!z 相當于(x<y)&&(!z),沒有必要去記憶運算符號的優(yōu)先級別,在編寫程序時可盡量的使用括號來實現(xiàn)你想要的運算次序,以免產(chǎn)生難以閱讀或含糊不清的計算順序。

運算符的結(jié)合性決定了并列相同級別的運算符的先后順序,例如,加減的結(jié)合性是從左到右,8-5+3 相當于(8-5)+3.邏輯否運算符 的結(jié)合性是右到左, x 相當于?。ǎ)。表3.4是Java 所有運算符的優(yōu)先級和結(jié)合性。

七 位移運算符 帶符號左移 帶符號右移 >>> 無號右移 例子:

int a1 = 8; // 0000 0000 0000 1000   
System.out.println(a1>>>2); //// 0000 0000 0000 0010

輸出為 2

運算符優(yōu)先級

按優(yōu)先級從高到低排列如下:

[ ]、 ( )、 ++、--、 !、 ~、 instanceof、 *、 /、 %、 +、 -、《、 》、 >>>、 <>、 < 、=、 >、 \、 ==、 !=、 &、^、& &、 ||、 ? :、= .

Java 強制類型轉(zhuǎn)換

強制和轉(zhuǎn)換

Java 語言和解釋器限制使用強制和轉(zhuǎn)換,以防止出錯導致系統(tǒng)崩潰。整數(shù)和浮點數(shù)運算符間可以來回強制轉(zhuǎn)換,但整數(shù)不能強制轉(zhuǎn)換成數(shù)組或?qū)ο?。對象不能被強制為基本類型?Java 中整數(shù)運算符在整數(shù)運算時,如果操作數(shù)是 long 類型,則運算結(jié)果是 long 類型,否則為 int 類型,絕不會是 byte,short 或 char 型。這樣,如果變量i被聲明為 short 或 byte,i+1 的結(jié)果會是 int.如果結(jié)果超過該類型的取值范圍,則按該類型的最大值取模。

運算符操作

  • 一、運算符"+",如果必要則自動把操作數(shù)轉(zhuǎn)換為 String 型。如果操作數(shù)是一個對象,它可定義一個方法 toString()返回該對象的 String 方式,例如 floata=1.0print("Thevalueofais"+a+"\n");+運算符用到的例子 Strings="a="+a;+= 運算符也可以用于 String.注意,左邊(下例中的s1)僅求值一次。s1+=a;//s1=s1+a//若 a 非 String型,自動轉(zhuǎn)換為 String 型。
  • 二、整數(shù)算術運算的異常是由于除零或按零取模造成的。它將引發(fā)一個算術異常。下溢產(chǎn)生零,上溢導致越界。例如:加1超過整數(shù)最大值,取模后,變成最小值。一個 op= 賦值運算符,和上表中的各雙目整數(shù)運算符聯(lián)用,構(gòu)成一個表達式。整數(shù)關系運算符<,>,<=,>=,==和!=產(chǎn)生 boolean 類型的數(shù)據(jù)。
  • 三、數(shù)組運算符數(shù)組運算符形式如下:[]可給出數(shù)組中某個元素的值。合法的取值范圍是從0到數(shù)組的長度減1.
  • 四、對象運算符雙目運算符 instanceof 測試某個對象是否是指定類或其子類的實例。 例如:if(myObjectinstanceofMyClass) { MyClassanothermyObject=(MyClass)myObject; … } 是判定 myObject 是否是 MyClass 的實例或是其子類的實例。
  • 五、浮點運算符浮點運算符可以使用常規(guī)運算符的組合:如單目運算符++、--,雙目運算符+、-、*和/,以及賦值運算符+=,-=,=,和/=.此外,還有取模運算:%和%=也可以作用于浮點數(shù),例如:a%b 和 a-((int)(a/b)b)的語義相同。這表示 a%b 的結(jié)果是除完后剩下的浮點數(shù)部分。只有單精度操作數(shù)的浮點表達式按照單精度運算求值,產(chǎn)生單精度結(jié)果。如果浮點表達式中含有一個或一個以上的雙精度操作數(shù),則按雙精度運算,結(jié)果是雙精度浮點數(shù)。
  • 六、布爾運算符布爾(boolean)變量或表達式的組合運算可以產(chǎn)生新的 boolean 值,fales 和 true(記得是小寫)。單目運算符!是布爾非。雙目運算符&,|和^是邏輯 AND,OR 和 XOR 運算符,它們強制兩個操作數(shù)求布爾值。為避免右側(cè)操作數(shù)冗余求值,用戶可以使用短路求值運算符&&和||.
  • 七、用戶可以使用==和!=,賦值運算符也可以用&=、|=、^=.三元條件操作符和 C 語言中的一樣。
  • 八、++運算符用于表示直接加1操作。增量操作也可以用加運算符和賦值操作間接完成。++lvalue(左值表示 lvalue+=1,++lvalue 也表示 lvalue=lvalue+1.
  • 九、--運算符用于表示減1操作。++和--運算符既可以作為前綴運算符,也可以做為后綴運算符。雙目整數(shù)運算符是:運算符操作*+加-減乘/除%取模&位與|位或^位異或《左移 》右移(帶符號) >>>添零右移整數(shù)除法按零舍入。除法和取模遵守以下等式: (a/b)*b+(a%b)==a

java 運算符問題:

&是位

&&是邏輯

當&兩邊是整數(shù)時執(zhí)行的是位運算,而兩邊是 boolean 值時執(zhí)行的是邏輯運算, 如:

3&6 就是執(zhí)行的位運算,結(jié)果是一個整數(shù): true&false 執(zhí)行的就是邏輯運算,結(jié)果是一個 boolean 值:false &的邏輯運算和&&邏輯運算是存在一定不同的

&邏輯運算時兩邊都會計算的,而&&則在左邊為假時則直接返的是 false 不再計算右邊

舉個例子:

  • 1:int[] a={1,2,3}; if(a[0]==2&a[3]==4){System.out.println("true")}
  • 2:int[] a={1,2,3}; if(a[0]==2&&a[3]==4){System.out.println("true")}

這兩個例子中,第一個會拋出異常,而第二個則什么不會輸出也不會拋異常 這是因為第一個例子中 if 語句中用的是&,所以兩邊的都會計算,當計算a[3]==4時拋出數(shù)組下標越界異常。第二個例子則在計算第一個式子a[0]==2發(fā)現(xiàn)結(jié)果為假則不再計算右邊,直接返回 false,所以該例子不會輸出任何東西。

上一篇:異常處理下一篇:字符串與數(shù)組