指派使用操作符“=”。它的意思是“取右邊的值(即右值),把它複制給左邊(即左值)”。右值可以是任何 常數、變量或者表達式 (隻要它能 生成 一個值就行)。但左值必須是一個明确的,已命名的變量。也就是說,必須有一個實體空間可以存儲等号右邊的值。
分類 基本資料類型 與 類資料類型 的不同
1、 對基本資料類型的指派是很簡單的。基本資料存儲了實際的數值,而并非指向一個對象的引用,是以在為其指派的時候,是直接将一個地方的内容複制到了另一個地方。
2、 但是在為對象“指派”的時候,情況卻放生了變化。對一個對象進行操作,我們真正操作的是對對象的引用。----這種特殊的現象通常稱作“别名現象”,是java操作對象的一種基本方式。
----摘抄自《thinking in java》p39
1 byte = 8 bits
1 kb = 1024 bytes
1 mb = 1024 kb
1 gb = 1024 mb
bps 是 bits per second 的簡稱。一般資料機及網絡通訊的傳輸速率都是以「bps」為機關。如56kbps、100.0mbps 等等。
bps即是byte per second 的簡稱。而電腦一般都以bps 顯示速度,如1mbps 大約等同 128 kbps。
byte 占位8個比特,或者說一個位元組.由于是有符号的,是以最小時為-128,最大值為+127.
short 占位16比特,兩位元組.最小值2^15,最大值2^15 -1.
int 占位32比特,4位元組.最小值 2^31,最大值2^31 -1
long 占位64比特,8位元組.最小值2^63,最大值2^63-1
float 占位32比特,4位元組.最小正非零值2^-149,最大正非零值(2-2^-23)·2^127.
double 占64比特,8位元組.最小正非零值為2^-1074,最大正非零值為(2-2^-52)·2^1023
char 占位16比特,2位元組.主要是為了支援unicode,是以java中的char是雙位元組,而非c++中的一個位元組
boolean 網上說法比較多,不過根據位元組碼的内容來看,如果是單個boolean變量,則使用int來存儲,如果是boolean數組,則用byte來存儲。
int 在c和c++的占用2個位元組,在java中4個位元組。
在c++中,char是基礎資料類型,8位,1個位元組。byte不是基礎資料類型,一般是typedef unsigned char byte;這樣子的,也就是說,byte其實是unsigned char類型,那麼也是8位,1個位元組。不同的是,char可以表示的範圍是-128-127,而byte可以表示的範圍是0-255。
在java中,char和byte都是基礎資料類型,其中的byte和c++中的char類型是一樣的,8位,1個位元組,-128-127。但是,char類型,是16位,2個位元組,'\u0000'-'\uffff',可以表示0~65535的無符号數。
為什麼java裡的char是2個位元組?
因為java内部都是用unicode的,是以java其實是支援中文變量名的,比如string 世界 = "我的世界";這樣的語句是可以通過的。
邏輯運算符用于連接配接布爾型表達式。、
邏輯運算符包括"&","&&","|","||"。
&:表示普通與,所有的判斷條件都要依次執行;
&&:若幹個條件,如果前面的條件傳回false,那麼後面不再判斷,就是false;
|:表示普通或,所有的判斷條件都要依次執行;
||:若幹個條件,如果前面的條件傳回true,那麼後面不再判斷,就是true;
位運算符主要針對二進制,
它包括了:按位與(&)、非(~)、按位或(|)、按位異或(^)。
從表面上看似乎有點像邏輯運算符,但邏輯運算符是針對兩個關系運算符來進行邏輯運算,而位運算符主要針對兩個二進制數的位進行邏輯運算。
&:當兩邊操作數對應的位同時是1時,結果為1,否則為0。如1100&1010=1000
|:當兩邊操作數對應的位隻要有一個是1,結果為1,否則為0。如1100|1010=1110
~:操作數的位,0變1,1變0,這個是單目運算符
^:當兩邊操作數對應的位值不同時,結果為1,否則為0。如1100^1010=0110
位移動運算符主要有三種:
<<(左移):
在沒有溢出的前提下,對于正數和負數,左移一位都相當于乘以2的1次方,左移n位就相當于乘以2的n次方
>>(帶符号右移):右移高位補符号位
右移一位相當于除2,右移n位相當于除以2的n次方。
>>>(無符号右移):右移高位補0,
無符号右移運算符隻對32位和64位的值有意義
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) {</code>
<code> </code><code>// 1、左移( << )</code>
<code> </code><code>// 0000 0000 0000 0000 0000 0000 0000 0101 然後左移2位後,低位補0://</code>
<code> </code><code>// 0000 0000 0000 0000 0000 0000 0001 0100 換算成10進制為20</code>
<code> </code><code>system.out.println(</code><code>5</code> <code><< </code><code>2</code><code>);</code><code>// 運作結果是20</code>
<code> </code><code>// 2、右移( >> ) 高位補符号位</code>
<code> </code><code>// 0000 0000 0000 0000 0000 0000 0000 0101 然後右移2位,高位補0:</code>
<code> </code><code>// 0000 0000 0000 0000 0000 0000 0000 0001</code>
<code> </code><code>system.out.println(</code><code>5</code> <code>>> </code><code>2</code><code>);</code><code>// 運作結果是1</code>
<code> </code><code>// 3、無符号右移( >>> ) 高位補0</code>
<code> </code><code>// 例如 -5換算成二進制後為:0101 取反加1為1011</code>
<code> </code><code>// 1111 1111 1111 1111 1111 1111 1111 1011</code>
<code> </code><code>// 我們分别對5進行右移3位、 -5進行右移3位和無符号右移3位:</code>
<code> </code><code>system.out.println(</code><code>5</code> <code>>> </code><code>3</code><code>);</code><code>// 結果是0</code>
<code> </code><code>system.out.println(-</code><code>5</code> <code>>> </code><code>3</code><code>);</code><code>// 結果是-1</code>
<code> </code><code>system.out.println(-</code><code>5</code> <code>>>> </code><code>3</code><code>);</code><code>// 結果是536870911</code>
<code> </code><code>// 4、位與( & )</code>
<code> </code><code>// 位與:第一個操作數的的第n位于第二個操作數的第n位如果都是1,那麼結果的第n為也為1,否則為0</code>
<code> </code><code>system.out.println(</code><code>5</code> <code>& </code><code>3</code><code>);</code><code>// 結果為1</code>
<code> </code><code>system.out.println(</code><code>4</code> <code>& </code><code>1</code><code>);</code><code>// 結果為0</code>
<code> </code><code>// 5、位或( | )</code>
<code> </code><code>// 第一個操作數的的第n位于第二個操作數的第n位 隻要有一個是1,那麼結果的第n為也為1,否則為0</code>
<code> </code><code>system.out.println(</code><code>5</code> <code>| </code><code>3</code><code>);</code><code>// 結果為7</code>
<code> </code><code>// 6、位異或( ^ )</code>
<code> </code><code>// 第一個操作數的的第n位于第二個操作數的第n位 相反,那麼結果的第n為也為1,否則為0</code>
<code> </code><code>system.out.println(</code><code>5</code> <code>^ </code><code>3</code><code>);</code><code>//結果為6</code>
<code> </code><code>// 7、位非( ~ )</code>
<code> </code><code>// 操作數的第n位為1,那麼結果的第n位為0,反之。</code>
<code> </code><code>system.out.println(~</code><code>5</code><code>);</code><code>// 結果為-6</code>
<code> </code><code>}</code>
<code></code>