1. 程式人生 > >Day2 數據類型和運算符

Day2 數據類型和運算符

bit 邏輯 col 包裝 例子 row 移動 條件 days

基本數據類型

Java 是一種強類型的語言,聲明變量時必須指明數據類型。變量(variable)的值占據一定的內存空間。不同類型的變量占據不同的大小。
Java中共有8種基本數據類型,包括4 種整型、2 種浮點型、1 種字符型、1 種布爾型,請見下表。

Java基本數據類型

數據類型 說明 所占內存 舉例 備註
byte 字節型 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‘ 字符型數據只能是一個字符,由單引號包圍。
boolean 布爾型 1 bit true, false

Java中的數值類型不存在無符號的,它們的取值範圍是固定的,不會隨著機器硬件環境或者操作系統的改變而改變。實際上, Java中還存在另外一種基本類型void,它也有對應的包裝類 java.lang.Void,不過我們無法直接對它們進行操作。對於數值類型的基本類型的取值範圍,我們無需強制去記憶,因為它們的值都已經以常量的形式定義在對應的包裝類中了。請看下面的例子:

public class PrimitiveTypeTest {  
    public static void main(String[] args) {  
        // byte  
        System.out.println("基本類型:byte 二進制位數:" + 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 二進制位數:" + 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 二進制位數:" + 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 二進制位數:" + 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 二進制位數:" + 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 二進制位數:" + 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 二進制位數:" + Character.SIZE);  
        System.out.println("包裝類:java.lang.Character");  
        // 以數值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺  
        System.out.println("最小值:Character.MIN_VALUE="  
                + (int) Character.MIN_VALUE);  
        // 以數值形式而不是字符形式將Character.MAX_VALUE輸出到控制臺  
        System.out.println("最大值:Character.MAX_VALUE="  
                + (int) Character.MAX_VALUE);  
    }  
}  

整數型

整數型包括byte、short、int和long。

public class Demo1 {
	public static void main(String[] args) {
		//字面值 默認是int類型
		byte n1 = 12;
		short n2 = 45;
		int n3 = 456;
		long n4 = 67L;// L 或 l
        }
}  

二進制太長可以使用下劃線來進行區分

public class Demo1 {
	public static void main(String[] args) {

        int n5 = 0B1010_1111_0011_1100;//二進制用0B或0b表示
        int n6 = 017;//八進制用0表示
        int n7 = 0xffff;//十六進制用0x或0X表示
        long n8 = 12345678987654321L;

        }
}    

浮點型

浮點型包括double和float。

註意:1.不要在數量級相差很大的浮點類型之間進行運算。2.避免進行等量的判斷

import java.math.*;
public class Demo1 {
	public static void main(String[] args) {
		float f1 = 34.5f;//f 或 F 默認為 double類型
		double d1 = 456.78d;//後綴 d 或 D 
		double d2 = 2.4e20;// e或 E 以 10為底 
		//浮點型可以表示十六進制,但是必須以科學
		//計數法表示,而且 以 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);//不一樣  輸出結果false
		System.out.println(num3);//輸出結果 0.30000000000000004
		//處理 java.math包
		BigDecimal number1 = new BigDecimal("0.1");
		BigDecimal number2 = new BigDecimal("0.2");
		System.out.println(number1.add(number2));//輸出結果 0.3
	}
}

字符型

char類型

  • char類型是一個單一的 16 位 Unicode 字符;
  • 最小值是 \u0000(即為0);
  • 最大值是 \uffff(即為65,535);
  • char 數據類型可以儲存任何字符;
  • 例子:char letter = ‘A‘;。

只能存儲一個字符,只能使用單引號

布爾型

布爾(boolean)型包括true和false

引用數據類型

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);//輸出結果:2
		// 2 +"郭靖"-》 “2郭靖”
		System.out.println(n1+n2+name);//輸出結果:2郭靖
		//"郭靖1"+n2 ->"郭靖11“
		System.out.println(name+n1+n2);//輸出結果:郭靖11


	}
} 

基本數據類型轉換

自動類型轉換

小-》 大
低-》 高

技術分享圖片

強制類型轉換

大-》小
高-》低

語法格式為:(強制轉換的數據類型)操作數

int num = (int)45.67;

類型提升原則

前提:運算
結果:采取高類型(範圍大的數據類型作為結果)

運算符

技術分享圖片

分類:根據操作數的個數

一元

二元

三元

算數運算符

技術分享圖片

public class Demo5 {
	public static void main(String[] args) {
		
		System.out.println(5 + 2);//輸出結果:7
		System.out.println(5 - 2);//輸出結果:3
		System.out.println(5 * 2);//輸出結果:10
		//------------除法--------------------------
		//除數和被除數都是整數結果會取整數部分
		System.out.println(5 / 2);////輸出結果:2

		System.out.println(5.0 / 2);//輸出結果:2.5
		System.out.println(5 / 2.0);//輸出結果:2.5
		System.out.println(5.0 / 2.0);//輸出結果:2.5
		//除數為0 拋出異常
		//System.out.println(5 / 0);
		System.out.println(5.0 / 0);//正無窮大  輸出結果:Infinity
		System.out.println(-5.0 / 0);//負無窮大  輸出結果:-Infinity
		//非數字NaN
		System.out.println(0.0 / 0);//輸出結果:NaN
		//-----------------取余數,取模----------------------------
		System.out.println( 5 % 2);//輸出結果:1
		System.out.println(5.0 % 2);//輸出結果:1.0
		System.out.println(5 % -2);//輸出結果: 1
		System.out.println(-5 % 2);//輸出結果:-1,符號看被除數
	    //---------------習題講解--------------------------------
		/*根據天數(46)計算周數和剩余的天數*/
		int days = 46;
		int week = days / 7;//周
		int day = days % 7;//余數天
		System.out.println(week+"周,余數"+day+"天");

		//----------------------------------------------
		/*
		對於隨意輸入的一個3位數,
		反轉;例如:234反轉後
		(將每一個數字反轉輸出即可):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


	}
}

關系運算符

技術分享圖片

邏輯運算符

技術分享圖片

&& || 短路與和短路或

位運算符

技術分享圖片

& | 非短路與和非短路或

5    二進制 00000000-00000000-00000000-00000101       

2    二進制 00000000-00000000-00000000-00000010

//&如果相對應位都是1,則結果為1,否則為0
5&2  二進制 00000000-00000000-00000000-00000000

//|如果相對應位都是0,則結果為0,否則為1
5|2  二進制 00000000-00000000-00000000-00000111

//^如果相對應位值相同,則結果為0,否則為1
5^2  二進制 00000000-00000000-00000000-00000000

//~按位補運算符翻轉操作數的每一位,即0變成1,1變成0。
~5   二進制 11111111-11111111-11111111-11111010
       減一 11111111-11111111-11111111-11111001
	   取反 00000000-00000000-00000000-00000110
	   
//<<向左移動幾位,右邊低端位用0補全   
5<<2 二進制 00000000-00000000-00000000-00010100

//>>向右移動幾位,左邊高位是什麽用什麽補位,是1用1,是0用0
5>>2 二進制 00000000-00000000-00000000-00000001

//>>>無符號右移,左邊高位全部用0進行補位
5>>>2二進制 00000000-00000000-00000000-00000001

-6>>>2二進制 00111111-11111111-11111111-11111110

擴展賦值運算符

技術分享圖片

條件運算符

語法:

比較運算||Boolean?表達式1:表達式2

如果?前的結果是true返回表達式1,如果?前返回false返回表達式2

技術分享圖片

運算符的優先級

技術分享圖片

Day2 數據類型和運算符