1. 程式人生 > >JAVA基本語法:資料型別

JAVA基本語法:資料型別

java使用兩種資料型別,對現實世界進行分類:

JAVA是強型別語言,對於每一種資料都定義了明確的具體資料型別,在記憶體中分配了不同大小的記憶體空間:JAVA中,整數的預設型別是int;小數的預設型別是double

1.基本資料型別:(四類八種)

        整數類:byte short int long(存在四種整數型別的原因根據記憶體的不同,合理分配記憶體空間

        小數類:float  double(可能出現小數位不精確的現象

        字元類:char

        注:char是關鍵字,並且屬於基本資料型別,使用單引號括住一個字元。而String屬於引用資料型別中的類,使用雙引號括住多個字元。在計算機中以ASCII碼/unicode碼等(以數字代替字元)來儲存字元。

        布林類:boolean

2.引用資料型別:除了基本資料型別以外的所有型別

        類class、陣列[ ]、介面interface

資料型別間的轉換:

        預設轉換:

byte,short,char—int—long—float—double

        強制轉換:目標型別 變數名=(目標型別)(被轉換的資料);

        注:布林型別不能轉為其它型別;byte,short,char相互之間不轉換,他們參與運算首先轉換為int型別。


相關注意事項:

不同資料型別的賦值要求:

/**
	案例:使用8種資料型別定義變數
	JAVA中,整數的預設型別是int;小數的預設型別是double。
*/
class Demo01{
	public static void main(String[] args){
		/*
		將int型別的123賦值給byte,也是把大型別的資料賦值給小型別,但不會賦值;
		定義byte、short型別的變數只要右邊的整數數值在範圍內,就可以複製給byte、short
		*/
		byte a = 123;   
		short b = 489;
		int c = 456;
		/*
		int類型範圍小於long型別,轉型是會自動在數值位補零。
		加上L的原因是:可以對d賦超出int類型範圍的值。即告訴計算機以8個位元組儲存256。
		*/
		long d = 256L;   
		/*
		報錯:從double轉換到float可能會有損失;
		原因:這是一條賦值語句,是把等號右邊的值,賦值給等號左邊的變數,等號
			
		*/
		float e = 1.2f;  //小數的預設型別是double,新增f不會出現不相容的錯誤提示。
		double f = 1.5;
		char g = 'c';    //字元有單引號括住,並且只能有一個字元
		boolean m = true;
}

資料型別間的運算:

/**
	資料型別之間的運算:
	byte,short,char型別是不能直接參與運算的,需要先轉成int型別。
	預設轉換:byte,short,char—int—long—float—double
	
	給byte,short賦值的時候,先看等號的右邊有沒有變數:
	1.如果有變數,就按照上面的規則看右側範圍是否在左邊的範圍之內,若超過則會報錯。
	2.如果都是常量,就看最終的結果是否在左邊的範圍之內,如果在就可以直接賦值。
*/
class DataTypeDemo3{
	public static void main(String[] args){
		
		byte b1 = 3,b2 = 4,b;
		/*
			錯誤:不相容的型別:從int轉換到byte可能會有損失
			原因:b1,b2是變數,並且它的型別預設轉為int型別,此時int類型範圍
			是大於byte的,而程式只有在解釋階段(java階段)才會知道變數的範圍,
			因此在編譯階段會出現錯誤。
		*/
		b = b1 + b2;
		b = 3 + 4;     //正確,類似於byte b = 7;
		
		float f = 12.4f;
		/*
			通過程式演示,發現可以把一個8位元組的long型別數值賦值給4個位元組的
			float型別變數。主要原因是二者使用二進位制表示形式的不一致,因為
			float的範圍是遠遠大於長整型long的
		*/
		float f1 = 134L;
		float f2 = 120;    //正確,int類型範圍小於float
		float f3 = 120.0; //錯誤,double型別的範圍大於float,需要改寫成120.0f
	}
}

基本型別中的char型別:

char型別直接列印,用的是它所代表的字元。char型別參與運算,用的是他底層的編碼

/**
	ASCII 美國首先編寫的,只用到了0-127。ASCII碼佔用了1byte 0-255 -->使用數字代表字元
	(前32個字元實際是沒有意義的,主要是列印的時候使用)
	
	GBK碼->GB2312碼->GB18320碼,中國編寫的,主要存中文字元。英文/數字 1個位元組;中文 2個位元組
	
	ISO:國際標準化組織。將各個國家編的碼錶統一在了一起,unicode(萬國碼/字符集) 佔用2個位元組
	由於unicode佔用2個位元組,而英文只佔用1個位元組。在使用unicode編寫英文時會浪費資源。
	因此在unicode的基礎上出現了另外一些碼錶:
	---  utf-8(可變位元組數來表示字元)   英文/數字  1個位元組;中文  3個位元組
	---  utf-16
	Big5:臺灣地區使用。
	
	char的預設值為"\u0000",\u表示使用unicode編碼,本質上代表0,表現形式是空格。需要注意的是ASCII碼有表示空格的數字
	char佔兩個位元組(0-65535),使用unicode編碼。
*/
class DataTypeDemo4{
	public static void main(String[] args){
		
		//char型別直接列印,用的是它所代表的字元。char型別參與運算,用的是他底層的編碼。
		char ch1 = 'a';
		System.out.println(ch1);
		System.out.println(ch1+1);
		
		char ch2 = 98;
		System.out.println(ch2);
		
		char ch3 = '\u0063';      //"\u"後面是4位的十六進位制,即99
		System.out.println(ch3);  //c
	}
}

字串、字元與整數的計算:

/**
	+ : 正號;加法運算;字串的拼接。
	
	要注意運算的順序:從左到右依次運算,有括號的先算括號裡的。(先算乘除,後算加減)
	String和任意型別做加法,得到的都是String,值就是拼接後的結果
	
	java不同於C++,布林型別不能和其它基本資料型別做運算。即java中的true不代表1。
*/
class DataTypeDemo5{
	public static void main(String[] args){
		int a = +10;
		System.out.println('a');       //a
		System.out.println('a' + 1);   //98
		System.out.println("hello" + 'a' + 1);   //helloa1
		System.out.println('a' + 1 + "hello");   //98hello
		System.out.println("5+5=" + 5 + 5);      //5+5=55
		System.out.println("5+5=" + (5+5));      //5+5=10
		System.out.println(5 + 5 +"=5+5");       //10=5+5
		
		//System.out.println(true + '1');        //錯誤:二元運算子‘+’的操作型別錯誤
		System.out.println(true + "1");        //true1
	}
}

強制型別轉換:

/**
	強制型別轉換的格式:目標型別  變數名 = (目標型別)常量/變數;
	
	基本資料型別:除了boolean型別以外,其它7種類型都可以相互轉換;
				  一般是在把大型別轉成小型別的時候使用強制型別轉換。
	引用資料型別:也可以使用強制型別轉換,但必須具備子父類的關係。	
*/
class ForceTypeTransform{
	public static void main(String[] A){
		int a = 10;
		long b = a;    //預設型別轉化:byte,short,char—int—long—float—double
		System.out.println(b);
		
		long c = 10;
		//int d = c;    //錯誤:不相容的型別,從long轉換到int可能會有損失
		
		int d = (int)c;  //強制型別轉換
		
		byte by = (byte)130;
		System.out.println(by)   //結果是-126
	}
}

上述程式碼中130>byte的範圍,對他強制轉型後等於-126。原理如下: