Java基本數(shù)據(jù)類型和運(yùn)算符詳解
本文實例講述了Java基本數(shù)據(jù)類型和運(yùn)算符。分享給大家供大家參考,具體如下:
基本數(shù)據(jù)類型
Java 是一種強(qiáng)類型的語言,聲明變量時必須指明數(shù)據(jù)類型。變量(variable)的值占據(jù)一定的內(nèi)存空間。不同類型的變量占據(jù)不同的大小。
Java中共有8種基本數(shù)據(jù)類型,包括4 種整型、2 種浮點型、1 種字符型、1 種布爾型,請見下表。
Java基本數(shù)據(jù)類型
| 數(shù)據(jù)類型 | 說明 | 所占內(nèi)存 | 舉例 | 備注 |
| byte | 字節(jié)型 | 1 byte | 3,127 | |
| short | 短整型 | 2 bytes | 3,32767 | |
| int | 整型 | 4 bytes | 3,21474836 | |
| long | 長整型 | 8 bytes | 3L,92233720368L | long最后要有一個L字母(大小寫無所謂) |
| float | 單精度浮點型 | 4 bytes | 1.2F, 223.56F | float最后最好有一個F字母(大小寫無所謂)。 |
| double | 雙精度浮點型 | 8 bytes | 1.2, 1.2D, 223.56, 223.56D |
double最后最好有一個D字母(大小寫無所謂)。 |
| char | 字符型 | 2 bytes | 'a','A' | 字符型數(shù)據(jù)只能是一個字符,由單引號包圍。 |
| boolean | 布爾型 | 1 bit | true, false |
Java中的數(shù)值類型不存在無符號的,它們的取值范圍是固定的,不會隨著機(jī)器硬件環(huán)境或者操作系統(tǒng)的改變而改變。實際上, Java中還存在另外一種基本類型void,它也有對應(yīng)的包裝類 java.lang.Void,不過我們無法直接對它們進(jìn)行操作。對于數(shù)值類型的基本類型的取值范圍,我們無需強(qiáng)制去記憶,因為它們的值都已經(jīng)以常量的形式定義在對應(yīng)的包裝類中了。請看下面的例子:
public class PrimitiveTypeTest {
public static void main(String[] args) {
// byte
System.out.println("基本類型:byte 二進(jìn)制位數(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 二進(jìn)制位數(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 二進(jìn)制位數(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 二進(jìn)制位數(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 二進(jìn)制位數(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 二進(jìn)制位數(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 二進(jìn)制位數(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);
}
}
整數(shù)型
整數(shù)型包括byte、short、int和long。
public class Demo1 {
public static void main(String[] args) {
//字面值 默認(rèn)是int類型
byte n1 = 12;
short n2 = 45;
int n3 = 456;
long n4 = 67L;// L 或 l
}
}
二進(jìn)制太長可以使用下劃線來進(jìn)行區(qū)分
public class Demo1 {
public static void main(String[] args) {
int n5 = 0B1010_1111_0011_1100;//二進(jìn)制用0B或0b表示 int n6 = 017;//八進(jìn)制用0表示
int n7 = 0xffff;//十六進(jìn)制用0x或0X表示
long n8 = 12345678987654321L;
}
}
浮點型
浮點型包括double和float。
注意:1.不要在數(shù)量級相差很大的浮點類型之間進(jìn)行運(yùn)算。2.避免進(jìn)行等量的判斷
import java.math.*;
public class Demo1 {
public static void main(String[] args) {
float f1 = 34.5f;//f 或 F 默認(rèn)為 double類型
double d1 = 456.78d;//后綴 d 或 D
double d2 = 2.4e20;// e或 E 以 10為底
//浮點型可以表示十六進(jìn)制,但是必須以科學(xué)
//計數(shù)法表示,而且 以 p為底
double d3 = 0x3.4p20;// p或 P以2
double d4 = 2.4e20;
double d5 = d4 + 1;
double num1 = 0.1;
double num2 = 0.2;
double num3 = num1 + num2;//0.3
//java.lang
System.out.println(num3 == 0.3);//不一樣 輸出結(jié)果false
System.out.println(num3);//輸出結(jié)果 0.30000000000000004
//處理 java.math包
BigDecimal number1 = new BigDecimal("0.1");
BigDecimal number2 = new BigDecimal("0.2");
System.out.println(number1.add(number2));//輸出結(jié)果 0.3
}
}
字符型
char類型
- char類型是一個單一的 16 位 Unicode 字符;
- 最小值是 \u0000(即為0);
- 最大值是 \uffff(即為65,535);
- char 數(shù)據(jù)類型可以儲存任何字符;
- 例子:char letter = 'A';。
只能存儲一個字符,只能使用單引號
布爾型
布爾(boolean)型包括true和false
引用數(shù)據(jù)類型
String
public class Demo2 {
public static void main(String[] args) {
String name = "郭靖";
String address = "北京";
//+ 連接字符串
System.out.println(name+address);
int n1 = 1;
int n2 = 1;
System.out.println(n1 + n2);//輸出結(jié)果:2
// 2 +"郭靖"-》 “2郭靖”
System.out.println(n1+n2+name);//輸出結(jié)果:2郭靖
//"郭靖1"+n2 ->"郭靖11“
System.out.println(name+n1+n2);//輸出結(jié)果:郭靖11
}
}
基本數(shù)據(jù)類型轉(zhuǎn)換
自動類型轉(zhuǎn)換
小-》 大
低-》 高

強(qiáng)制類型轉(zhuǎn)換
大-》小
高-》低
語法格式為:(強(qiáng)制轉(zhuǎn)換的數(shù)據(jù)類型)操作數(shù)
int num = (int)45.67;
類型提升原則
前提:運(yùn)算
結(jié)果:采取高類型(范圍大的數(shù)據(jù)類型作為結(jié)果)
運(yùn)算符

分類:根據(jù)操作數(shù)的個數(shù)
一元
二元
三元
算數(shù)運(yùn)算符

public class Demo5 {
public static void main(String[] args) {
System.out.println(5 + 2);//輸出結(jié)果:7
System.out.println(5 - 2);//輸出結(jié)果:3
System.out.println(5 * 2);//輸出結(jié)果:10
//------------除法--------------------------
//除數(shù)和被除數(shù)都是整數(shù)結(jié)果會取整數(shù)部分
System.out.println(5 / 2);////輸出結(jié)果:2
System.out.println(5.0 / 2);//輸出結(jié)果:2.5
System.out.println(5 / 2.0);//輸出結(jié)果:2.5
System.out.println(5.0 / 2.0);//輸出結(jié)果:2.5
//除數(shù)為0 拋出異常
//System.out.println(5 / 0);
System.out.println(5.0 / 0);//正無窮大 輸出結(jié)果:Infinity
System.out.println(-5.0 / 0);//負(fù)無窮大 輸出結(jié)果:-Infinity
//非數(shù)字NaN
System.out.println(0.0 / 0);//輸出結(jié)果:NaN
//-----------------取余數(shù),取模----------------------------
System.out.println( 5 % 2);//輸出結(jié)果:1
System.out.println(5.0 % 2);//輸出結(jié)果:1.0
System.out.println(5 % -2);//輸出結(jié)果: 1
System.out.println(-5 % 2);//輸出結(jié)果:-1,符號看被除數(shù)
//---------------習(xí)題講解--------------------------------
/*根據(jù)天數(shù)(46)計算周數(shù)和剩余的天數(shù)*/
int days = 46;
int week = days / 7;//周
int day = days % 7;//余數(shù)天
System.out.println(week+"周,余數(shù)"+day+"天");
//----------------------------------------------
/*
對于隨意輸入的一個3位數(shù),
反轉(zhuǎn);例如:234反轉(zhuǎn)后
(將每一個數(shù)字反轉(zhuǎn)輸出即可):432
*/
int num = 234;
int n1,n2,n3;
n1 = num % 10;//個位
n2 = num / 10 % 10;//十位
n3 = num / 100;//百位
System.out.println(n1+""+n2+""+n3);//"432"
System.out.println(n1*100+n2*10+n3);//432
}
}
關(guān)系運(yùn)算符

邏輯運(yùn)算符

&& || 短路與和短路或
位運(yùn)算符
& | 非短路與和非短路或
5 二進(jìn)制 00000000-00000000-00000000-00000101 2 二進(jìn)制 00000000-00000000-00000000-00000010 //&如果相對應(yīng)位都是1,則結(jié)果為1,否則為0 5&2 二進(jìn)制 00000000-00000000-00000000-00000000 //|如果相對應(yīng)位都是0,則結(jié)果為0,否則為1 5|2 二進(jìn)制 00000000-00000000-00000000-00000111 //^如果相對應(yīng)位值相同,則結(jié)果為0,否則為1 5^2 二進(jìn)制 00000000-00000000-00000000-00000000 //~按位補(bǔ)運(yùn)算符翻轉(zhuǎn)操作數(shù)的每一位,即0變成1,1變成0。 ~5 二進(jìn)制 11111111-11111111-11111111-11111010 減一 11111111-11111111-11111111-11111001 取反 00000000-00000000-00000000-00000110 //<<向左移動幾位,右邊低端位用0補(bǔ)全 5<<2 二進(jìn)制 00000000-00000000-00000000-00010100 //>>向右移動幾位,左邊高位是什么用什么補(bǔ)位,是1用1,是0用0 5>>2 二進(jìn)制 00000000-00000000-00000000-00000001 //>>>無符號右移,左邊高位全部用0進(jìn)行補(bǔ)位 5>>>2二進(jìn)制 00000000-00000000-00000000-00000001 -6>>>2二進(jìn)制 00111111-11111111-11111111-11111110
擴(kuò)展賦值運(yùn)算符

條件運(yùn)算符
語法:
比較運(yùn)算||Boolean?表達(dá)式1:表達(dá)式2
如果?前的結(jié)果是true返回表達(dá)式1,如果?前返回false返回表達(dá)式2

運(yùn)算符的優(yōu)先級

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
SpringBoot中如何對actuator進(jìn)行關(guān)閉
這篇文章主要介紹了SpringBoot中如何對actuator進(jìn)行關(guān)閉問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
Kotlin中?StateFlow?或?SharedFlow?的區(qū)別解析
Kotlin協(xié)程中的StateFlow和SharedFlow是響應(yīng)式數(shù)據(jù)流,分別用于UI狀態(tài)管理和事件通知,StateFlow有初始值,只保留最新值,適用于UI狀態(tài)管理;SharedFlow沒有初始值,可以配置緩存大小,適用于事件通知,感興趣的朋友一起看看吧2025-03-03
Spring Boot統(tǒng)一異常處理最佳實踐(拓展篇)
這篇文章主要給大家介紹了關(guān)于Spring Boot統(tǒng)一異常處理最佳實踐(拓展篇)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
聊聊spring @Transactional 事務(wù)無法使用的可能原因
這篇文章主要介紹了spring @Transactional 事務(wù)無法使用的可能原因,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java定時任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解
這篇文章主要介紹了Java定時任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解, 定時任務(wù)就是在指定時間執(zhí)行程序,或周期性執(zhí)行計劃任務(wù),Java中實現(xiàn)定時任務(wù)的方法有很多,本文從從JDK自帶的一些方法來實現(xiàn)定時任務(wù)的需求,需要的朋友可以參考下2024-01-01


