java基礎學習3(數據類型轉換、運算符)

java基礎學習—基本數據類型知識,筆記來源於傳智。

基本數據類型

整形相關:

  1. byte : 8bit;
  2. short : 16bit
  3. int : 32bit
  4. long : 64bit

浮點形相關:

  1. float : 32bit;(保留7位小數)
  2. double : 64bit (保留15位小數)

其他:
1. char : 8bit;
2. boolean(布爾): 32bit或8bit

注意:

  1. 佔用內存特殊的是布爾類型,單獨聲明一個boolean變量時佔的是4個字節,但是當聲明一個布爾數組時則數組中的元素佔1個字節
  2. 如果需要把該數據表示成一個long類型的數據,那麼需要加數據後面加上L表示,L是不區分大小寫的,但是建議使用大寫。,可是我們經常會做一下操作
  		byte a = 10;

這裏不報錯的原因是java編譯器在編譯時可以識別常量的值,並判斷是否超過有效值。但是編譯時不會識別變量的值,如下:

 		int a = 10;
 		byte i = a;
  1. 如果一個小數沒有加上任何標識的時候,那麼該小數默認是double類型的數據,如果需要表示成float類型,那麼需要在小數的後面加上f表示。f不區分大小寫的

類型轉化

小數據類型轉大數據類型 稱爲自動類型轉換,大數據類型轉小數據類型成爲強制類型轉換,在強制轉化時格式如下否則會報錯

int a = 5;
byte b = (byte)a;

不同類型數據運算

  1. 凡是byte、short 、 char數據類型數據在運算的時候都會自動轉換成int類型的數據再運算。
		byte a1 =1;
		byte a2 = 2;
		byte a3 = (byte)(a1+a2);//不強轉會報錯
		System.out.println(a3); //3 

2.兩個不同數據類型的數據在運算的時候,結果取決於大的數據類型

int a = 100;
byte b = 5;
byte c = (byte)(b+a);

負數的存儲

		int i = 128;  //4個字節
		byte b =(byte) i;  // 1個字節
		System.out.println(b);  // -128

注意:

  1. 在計算機存儲中首位爲1的一定是負數,首位爲0一定爲整數。且負數存儲的補碼

補碼的計算

  1. 取絕對值
  2. 取反
  3. +1

這裏輸出的是-128,那麼看下-128的由來
0000 0000 0000 0000 1000 0000
------------------------------強轉時取8個字節得到
1000 0000 首位爲1代表存的是負數,那我們計算下他代表的值

1000 0000
減去
0000 0001

0111 1111
取反

1000 0000 轉爲10精製爲128加上負號就是-128

運算符

算術運算符:

+ (正數、加法、連接符)
連接符的作用: 讓任何的數據都可以與字符串進行拼接。
如果+號用於字符串的時候,那麼+號就是一個連接符,並不是 做加法功能了。
連接符要注意:任何類型的數據與字符串使用連接符連接,那麼結果都是字符串類型的數據。
-
*
/ (除法)
%(取模、取餘數)
class Demo3 {
	public static void main(String[] args){
		int i1 = 1;
		int i2 = 2;
		System.out.println(i1 +" world");  //1 world
		
		// 計算機每次運算的時候只能取兩個 數據運算。
		System.out.println(1+2+3 +" world"+1+2+3); // 6world123
		
		int a= 12;
		int b = 7;
		System.out.println(a/b); //1

		//在java中做取模 運算的時,結果的正負號是取決於被除數。
		System.out.println("結果:"+(10%3));  // 1
		System.out.println("結果:"+(10%-3)); // 1
		System.out.println("結果:"+(-10%3)); // -1
		System.out.println("結果:"+(-10%-3)); //  -1
	}
}

++ (自增) :  自增就是相當於操作數+1.
前自增:++位於操作數的前面。  比如: ++a;
前自增:先自增,後使用。
後自增: 先使用,後自增。
class Demo4 
{
	public static void main(String[] args) 
	{
		int a = 0;
		int sum = ++a; //前自增。 a = a+1  , sum = a
		int sum = a++; //後自增  sum = 0 , a = a+1
/*
	後自增在jvm的運行原理:
	
	因爲後自增要使用 到沒有+1之前 的值,那麼jvm會先聲明一個變量用於保存沒有+1之前的值。
	
	int i = 0;
	i = temp;

	原理:
		1. int temp = i; // 聲明瞭一個臨時變量用於記錄了i沒有加1之前的值。
		2. 自增。  i = i+1;   i = 1;
		3. temp把用作了表達式 的結果。
	
	i的值發生了幾次變化:
			i = 0 -----> 1----> 0
*/
		int i = 0;
		i = i++; // 後自增...  後自增要使用到沒有+1之前的值。
		System.out.println("i= "+i);//0
	}
}

自減: 操作數-1.

前自減: 先自減,後使用。

後自減: 先使用,後自減。

class Demo5 
{
	public static void main(String[] args) 
	{	
		/*
		int i = 1;
		int sum = --i;  //前自減   i = i-1 , sum = i;
		int sum = i--; // 後自減   sum = i ; i = i-1;
		System.out.println("sum = "+ sum);  // 0  1 
		*/

		int num = 10;
		//int sum = 10* num++; //後自增
		int sum = 10* ++num; //前自增 
		System.out.println("sum = "+ sum);

	}
}

賦值運算符:

=  (賦值運算符)
+= 
-=
*=
/=
%=
class Demo6 
{
	public static void main(String[] args) 
	{
		
		int i = 10; // 把10賦予給i變量。
		i+=2;  // i = i+2; 
		System.out.println("i = "+i);
	
	
		byte b1 = 1;
		byte b2 = 2;
		//b2 = (byte)(b2+b1); //需要強制類型轉換
		b2+=b1;  //b2 = b2+ b1;	 b2+=b1 在編譯的時候,java編譯器會進行強制類型轉換,不需要我們手動轉換了。
		System.out.println("b2 : "+ b2);
	}
}

比較運算符: 比較運算符的結果都是返回一個布爾值的。

== (判斷是否等於)
==用於比較兩個基本數據類型數據的時候,比較的是兩個變量所存儲的值是否一致.
==用於比較兩個引用類型變量的數據時候,比較的是兩個 引用類型變量所記錄的內存地址是否一致. 


!= (不等於)
> (大於)
< (小於)
>= (大於等於)
<= (小於等於)
class Demo7 
{
	public static void main(String[] args) 
	{
		/*
		int a = 10;
		int b =10;
		System.out.println("10等於10嗎?"+ (a==b));  
		System.out.println("10不等於1嗎?"+ (10!=1) ); //true  
		*/
		
		byte b  = 10;
		long l = 30;
		System.out.println(l>b); //兩個不同類型的數據是否可以比較呢.,可以的,但是兩個不同類型的數據必須是兼用的數據。
		//這個比較的過程會先把b轉換了long類型的數據,然後再進行比較 。

		System.out.println('a'>50);//true
	}
}

邏輯運算符 :邏輯運算符的作用是用於連接布爾表達式的。

& (與,並且)

規律: 只有左右變量同時 爲true,那麼結果纔是true,否則就爲false。

|  (或,或者)

規律: 只要兩邊的布爾表達式有一邊爲true,那麼結果就爲true,只有兩邊同時爲false 的時候,結果纔是false.

^  (異或)

規律: 只要兩邊的布爾表達式 結果不一致,那麼結果就爲true,如果左右兩邊 的布爾表達式一致,那麼就爲false.

! (非)

&& (短路與\雙與)

短路與和單與符號的相同與不同點:

相同點: 短路與和單與運算 的結果是一樣的。

不同點: 使用短路與的時候,如果左邊的布爾表達式爲false,則不會在運算右邊的布爾表達式,從而提高了
效率。使用單與的時候,即使發現左邊的布爾表達式爲false,還是會運算右邊的布爾表達式的。

只有左邊的布爾表達式爲false時,雙與的效率纔要高於單與的.

|| (短路或\雙或)

短路或與單或的相同點與不同點:

相同點:運算的結果是一致 的。

不同點:使用短路或的時候,當發現左邊的布爾表達式爲true時,則不會運算右邊的布爾表達式。
使用單或的時候 發現左邊的布爾表達式爲true,還是會運算右邊布爾表達式。

位運算符:位運算符就是直接操作二進制位的。

& (與)
| (或)
^ (異或)
規律: 如果操作數A連續異或同一個操作數兩次,那麼結果還是操作數A。
應用: 對數據加密.
~  (取反)
class Demo9{
	public static void main(String[] args){
		System.out.println(6&3); // 2 
		System.out.println(6|3); // 7
		System.out.println(6^3); //  5
		System.out.println(~7);  // -8
	}
}

移位運算符:

<<(左移)

規律:一個操作數進行左移運算的時候,結果就是等於操作數乘以2的n次方,n就是左移 的位數.
3<<1 = 3 2(1) = 6;
3<<2 = 3
2(2) = 12
3<<3 = 3*2(3) = 24

>>(右移)

規律:一個操作數在做右移運算的時候,實際上就是等於該操作數除以2的n次方,n就是右移的位數。

3>>1 = 3 / 2(1) = 1
3>>2 = 3 / 2(2) = 0 。。


>>>(無符號右移) :

無符號右移與右移的區別:進行右移運算的時候,如果操作數是一個正數,那麼左邊的空缺位使用0補,如果操作數是一個負數,那麼左邊的空缺位使用1補。而使用無符號右移的時候,不管是正數還是負數都統一使用0補。

三元運算符(三目運算符)

格式;
布爾表達式?值1:值2 ;

三元運算符要注意的細節:使用三元運算符的時候,一定要使用該表達式返回的結果,或者是定義一個變量接收該表達式返回的結果,否則報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章