請舉例說明什么是網(wǎng)絡(luò)營銷seo是做什么工作的
一、前言
在Java這門“啰嗦”的編程語言中,我們必須弄清楚每種數(shù)據(jù)類型的性質(zhì)和用途,才能讓程序“說人話”。要成為Java高手,就必須與各種數(shù)據(jù)類型打成一片。
本文則將帶你認(rèn)識Java中常見的兩位“角色”—數(shù)據(jù)類型與變量。
二、數(shù)據(jù)類型
在Java中數(shù)據(jù)類型主要分為兩類:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
基本數(shù)據(jù)類型有四類八種:
四類:整型、浮點(diǎn)型、字符型以及布爾型
八種:字節(jié)型、短整型、整型、長整型、單精度浮點(diǎn)型、雙精度浮點(diǎn)型、字符型、布爾型
數(shù)據(jù)類型 | 關(guān)鍵字 | 內(nèi)存占用(字節(jié)) | 范圍 |
---|---|---|---|
字節(jié)型 | byte | 1 | -128 ~ 127 |
短整型 | short | 2 | -32768 ~ 32767 |
整型 | int | 4 | -231~231-1 |
長整型 | long | 8 | -263~263-1 |
單精度浮點(diǎn)型 | float | 4 | 有范圍,一般不關(guān)注 |
雙精度浮點(diǎn)型 | double | 8 | 有范圍,一般不關(guān)注 |
字符型 | char | 2 | 0 ~ 65535 |
布爾型 | boolean | 沒有規(guī)定 | true 和 false |
注意:
-
不論是在16位系統(tǒng)還是32位系統(tǒng),
int
都占用4個(gè)字節(jié),long
都占8個(gè)字節(jié) -
整形和浮點(diǎn)型都是帶有符號的
-
整型默認(rèn)為
int
型,浮點(diǎn)型默認(rèn)為double
什么是字節(jié):
上面提到了每個(gè)數(shù)據(jù)類型的內(nèi)存占用的單位是字節(jié),那么什么是字節(jié)呢?
字節(jié)是計(jì)算機(jī)中表示空間大小的基本單位。
根據(jù)IEEE計(jì)算機(jī)學(xué)會的定義,字節(jié)(byte)是一組連續(xù)的比特(bit),其大小是8個(gè)比特。
一個(gè)比特可以放一個(gè)二進(jìn)制數(shù)字,而一個(gè)字節(jié)由8個(gè)二進(jìn)制位數(shù)組成。所以它的二進(jìn)制范圍是00000000到11111111,對應(yīng)的十進(jìn)制數(shù)是0到255。
三、變量
1、變量的定義
變量用于在程序運(yùn)行時(shí)表示數(shù)據(jù),并能隨之變化。變量名用于標(biāo)識變量,數(shù)據(jù)類型定義變量的值的類型,值是變量包含的數(shù)據(jù),存儲單元用來保存變量的值。
簡而言之:對于經(jīng)常改變的內(nèi)容,在Java程序中,稱為變量。而數(shù)據(jù)類型就是用來定義不同種類變量的。
int a = 10; //定義整形變量a,a是變量名也稱為標(biāo)識符,該變量中放置的值為10
int a1 = 10, a2 = 20, a3 = 30;// 注意:在一行可以定義多個(gè)相同類型的變量
double d = 3.14;//定義雙精度浮點(diǎn)型變量d,該變量中放置的值為3.14
char c = 'A';//定義字符型變量c,該變量中放置的為字符'A'
boolean b = true;//定義一個(gè)布爾類型變量,該變量的值為true
2、整型變量
Ⅰ、整型變量
方式一:在定義時(shí)給出初始值
int a = 10;
System.out.println(a);
方式二:在定義時(shí)沒有給初始值,但使用前必須設(shè)置初值
int b;
b = 10;
System.out.println(b);
我在定義時(shí)就不賦初始值,會發(fā)生什么?
int c;
System.out.println(c);
c = 100;
會報(bào)錯(cuò)!!!!!
int型變量所能表示的范圍?
System.out.println(Integer.MIN_VALUE);//int類型的最小值
System.out.println(Integer.MAX_VALUE);//int類型的最大值
注意事項(xiàng):
int
不論在何種系統(tǒng)下都是4個(gè)字節(jié)- 推薦使用方式一定義,如果沒有合適的初始值,可以設(shè)置為0
- 在給變量設(shè)置初始值時(shí),值不能超過int的表示范圍,否則會導(dǎo)致溢出
- 變量在使用之前必須要賦初值,否則編譯報(bào)錯(cuò)
int
的包裝類型為Integer
Ⅱ、長整型變量
int a = 10;
long b = 10; // long定義的長整型變量
long c = 10L; // 為了區(qū)分int和long類型,一般建議:long類型變量的初始值之后加L或者l
long d = 10l; // 一般更加以加大寫L,因?yàn)樾憀與1不好區(qū)分
long
型變量所能表示的范圍:這個(gè)數(shù)據(jù)范圍遠(yuǎn)超過 int 的表示范圍,足夠絕大部分的工程場景使用。
那么long類型的變量表示的范圍大概是多少呢?同樣的,可以寫一個(gè)程序測一下。
System.out.println(Long.MIN_VALUE);//int類型的最小值
System.out.println(Long.MAX_VALUE);//int類型的最大值
注意事項(xiàng):
-
長整型變量的初始值后加L或者l,推薦加L
-
長整型不論在那個(gè)系統(tǒng)下都占8個(gè)字節(jié)
-
長整型的表示范圍為:-263~263-1
-
long
的包裝類型為Long
Ⅲ、短整型變量
short a = 10;
System.out.println(a);
// short型變量所能表示的范圍:
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
注意事項(xiàng):
-
short
在任何系統(tǒng)下都占2個(gè)字節(jié) -
short
的表示范圍為:-32768 ~ 32767 -
使用時(shí)注意不要超過范圍(一般使用比較少)
-
short
的包裝類型為Short
3、字節(jié)型變量
byte b = 10;
System.out.println(b);
// byte型變量所能表示的范圍:
System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);
注意事項(xiàng):
-
byte
在任何系統(tǒng)下都占1個(gè)字節(jié) -
byte
的范圍是:-128 ~ 127 -
字節(jié)的包裝類型為
Byte
4、浮點(diǎn)型變量
Ⅰ、雙精度浮點(diǎn)型
double d = 3.14;
system.out.println(d);
為了更好的區(qū)分浮點(diǎn)型和整型的區(qū)別,我們可以看一下下面的代碼。
int a = 1;
int b = 2;
System.out.println(a / b);
上面的代碼輸出的是0.5 嗎?
結(jié)果居然是0,為什么呢?
**這是因?yàn)樵?Java 中, int
除以 int
的值仍然是 int
(會直接舍棄小數(shù)部分)。**如果想得到 0.5, 需要使用 double
類型計(jì)算.
double a = 1.0;
double b = 2.0;
System.out.println(a / b); // 輸出0.5
我們可以再看一個(gè)神奇的代碼
double num = 1.1;
System.out.println(num * num);
上面的代碼輸出的是1.21嗎?
double
類型的內(nèi)存布局遵守 IEEE 754 標(biāo)準(zhǔn)(和C語言一樣), 嘗試使用有限的內(nèi)存空間表示可能無限的小數(shù), 勢必會存在一定的精度誤差,因此浮點(diǎn)數(shù)是個(gè)近似值,并不是精確值。
注意事項(xiàng):
-
double
在任何系統(tǒng)下都占8個(gè)字節(jié) -
浮點(diǎn)數(shù)與整數(shù)在內(nèi)存中的存儲方式不同,不能單純使用 的形式來計(jì)算
-
double
的包裝類型為Double
-
double
類型的內(nèi)存布局遵守 IEEE 754 標(biāo)準(zhǔn)(和C語言一樣), 嘗試使用有限的內(nèi)存空間表示可能無限的小數(shù), 勢必會存在一定的精度誤差,因此浮點(diǎn)數(shù)是個(gè)近似值,并不是精確值。
Ⅱ、單精度浮點(diǎn)型
float num = 1.0f; // 寫作 1.0F 也可以
System.out.println(num);
float
類型在 Java 中占四個(gè)字節(jié), 同樣遵守 IEEE 754 標(biāo)準(zhǔn). 由于表示的數(shù)據(jù)精度范圍較小, 一般在工程上用到浮點(diǎn)數(shù)都優(yōu)先考慮 double
, 不太推薦使用 float
,float
的包裝類型為Float
。
5、字符型變量
char c1 = 'A'; // 大寫字母
char c2 = '1'; // 數(shù)字字符
System.out.println(c1);
System.out.println(c2);
// 注意:java中的字符可以存放整形
char c3 = '帥';
System.out.println(c3);
注意事項(xiàng):
-
Java 中使用 單引號 + 單個(gè)字母 的形式表示字符字面值.
-
計(jì)算機(jī)中的字符本質(zhì)上是一個(gè)整數(shù). 在 C 語言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一個(gè)字符占用兩個(gè)字節(jié), 表示的字符種類更多, 包括中文.
-
char
的包裝類型為Character
6、布爾型變量
布爾類型常用來表示真假。
boolean b = true;
System.out.println(b);
b = false;
System.out.println(b);
注意事項(xiàng):
boolean
類型的變量只有兩種取值,true
表示真,false
表示假.- Java 的
boolean
類型和 int 不能相互轉(zhuǎn)換, 不存在 1 表示 true, 0 表示 false 這樣的用法. - Java虛擬機(jī)規(guī)范中,并沒有明確規(guī)定
boolean
占幾個(gè)字節(jié),也沒有專門用來處理boolean
的字節(jié)碼指令,在Oracle公司的虛擬機(jī)實(shí)現(xiàn)中,boolean
占1個(gè)字節(jié)。 boolean
的包裝類型為Boolean
。
包裝類是什么?
包裝類指的是,基本數(shù)據(jù)類型對應(yīng)的類類型。因?yàn)榛緮?shù)據(jù)類型無法進(jìn)行對象化處理,所以就引入了包裝類。
8種基本數(shù)據(jù)byte、short、int、long、 float、double、char、boolean。除了int對應(yīng)的是Integer,char對應(yīng)的是Character。其余都是首字母大寫即可。
四、類型轉(zhuǎn)換
Java 作為一個(gè)強(qiáng)類型編程語言, 當(dāng)不同類型之間的變量相互賦值的時(shí)候, 會有教嚴(yán)格的校驗(yàn)。
int a = 10;
long b = 100L;
b = a; // 可以通過編譯
a = b; // 編譯失敗
在Java中,當(dāng)參與運(yùn)算數(shù)據(jù)類型不一致時(shí),就會進(jìn)行類型轉(zhuǎn)換。Java中類型轉(zhuǎn)換主要分為兩類:自動類型轉(zhuǎn)換(隱式) 和 強(qiáng)制類型轉(zhuǎn)換(顯式)。
1、自動類型轉(zhuǎn)換(隱式)
自動類型轉(zhuǎn)換即:代碼不需要經(jīng)過任何處理,在代碼編譯時(shí),編譯器會自動進(jìn)行處理。
特點(diǎn):數(shù)據(jù)范圍小的轉(zhuǎn)為數(shù)據(jù)范圍大的時(shí)會自動進(jìn)行。
System.Out.println(1024); // 整型默認(rèn)情況下是int
System.Out.println(3.14); // 浮點(diǎn)型默認(rèn)情況下是double
int a = 100;
long b = 10L;
b = a; // a和b都是整形,a的范圍小,b的范圍大,當(dāng)將a賦值給b時(shí),編譯器會自動將a提升為long類型,然后賦值
a = b; // 編譯報(bào)錯(cuò),long的范圍比int范圍大,會有數(shù)據(jù)丟失,不安全
float f = 3.14F;
double d = 5.12;
d = f; // 編譯器會將f轉(zhuǎn)換為double,然后進(jìn)行賦值
f = d; // double表示數(shù)據(jù)范圍大,直接將float交給double會有數(shù)據(jù)丟失,不安全
byte b1 = 100; // 編譯通過,100沒有超過byte的范圍,編譯器隱式將100轉(zhuǎn)換為byte
byte b2 = 257; // 編譯失敗,257超過了byte的數(shù)據(jù)范圍,有數(shù)據(jù)丟失
2、強(qiáng)制類型轉(zhuǎn)換(顯式)
強(qiáng)制類型轉(zhuǎn)換:當(dāng)進(jìn)行操作時(shí),代碼需要經(jīng)過一定的格式處理,不能自動完成。
特點(diǎn):數(shù)據(jù)范圍大的到數(shù)據(jù)范圍小的。
int a = 10;
long b = 100L;
b = a; // int-->long,數(shù)據(jù)范圍由小到大,隱式轉(zhuǎn)換
a = (int)b; // long-->int, 數(shù)據(jù)范圍由大到小,需要強(qiáng)轉(zhuǎn),否則編譯失敗
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,數(shù)據(jù)范圍由小到大,隱式轉(zhuǎn)換
f = (float)d; // double-->float, 數(shù)據(jù)范圍由大到小,需要強(qiáng)轉(zhuǎn),否則編譯失敗
a = d; // 報(bào)錯(cuò),類型不兼容
a = (int)d; // int沒有double表示的數(shù)據(jù)范圍大,需要強(qiáng)轉(zhuǎn),小數(shù)點(diǎn)之后全部丟棄
byte b1 = 100; // 100默認(rèn)為int,沒有超過byte范圍,隱式轉(zhuǎn)換
byte b2 = (byte)257; // 257默認(rèn)為int,超過byte范圍,需要顯示轉(zhuǎn)換,否則報(bào)錯(cuò)
boolean flag = true;
a = flag; // 編譯失敗:類型不兼容
flag = a; // 編譯失敗:類型不兼容
注意事項(xiàng):
-
不同數(shù)字類型的變量之間賦值, 表示范圍更小的類型能隱式轉(zhuǎn)換成范圍較大的類型
-
如果需要把范圍大的類型賦值給范圍小的, 需要強(qiáng)制類型轉(zhuǎn)換, 但是可能精度丟失
-
將一個(gè)字面值常量進(jìn)行賦值的時(shí)候, Java 會自動針對數(shù)字范圍進(jìn)行檢查
-
強(qiáng)制類型轉(zhuǎn)換不一定能成功,不相干的類型不能互相轉(zhuǎn)換
3、 類型提升
不同類型的數(shù)據(jù)之間相互運(yùn)算時(shí),數(shù)據(jù)類型小的會被提升到數(shù)據(jù)類型大的。
Ⅰ、int提升為long
int
與long
之間:int
會被提升為long
int a = 10;
long b = 20;
int c = a + b; // 編譯出錯(cuò): a + b==》int + long--> long + long 賦值給int時(shí)會丟失數(shù)據(jù)
long d = a + b; // 編譯成功:a + b==>int + long--->long + long 賦值給long
Ⅱ、byte與byte的運(yùn)算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 編譯報(bào)錯(cuò)
Test.java:5: 錯(cuò)誤: 不兼容的類型: 從int轉(zhuǎn)換到byte可能會有損失
byte c = a + b;^
結(jié)論: byte 和 byte 都是相同類型, 但是出現(xiàn)編譯報(bào)錯(cuò). 原因是, 雖然 a 和 b 都是 byte, 但是計(jì)算 a + b 會先將 a和 b 都提升成 int, 再進(jìn)行計(jì)算, 得到的結(jié)果也是 int, 這是賦給 c, 就會出現(xiàn)上述錯(cuò)誤。由于計(jì)算機(jī)的 CPU 通常是按照 4 個(gè)字節(jié)為單位從內(nèi)存中讀寫數(shù)據(jù). 為了硬件上實(shí)現(xiàn)方便, 諸如 byte 和 short這種低于 4 個(gè)字節(jié)的類型, 會先提升成 int, 再參與計(jì)算。
所以,正確的寫法應(yīng)該是:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);
Ⅲ、小結(jié)
-
不同類型的數(shù)據(jù)混合運(yùn)算, 范圍小的會提升成范圍大的.
-
對于
short
,byte
這種比 4 個(gè)字節(jié)小的類型, 會先提升成 4 個(gè)字節(jié)的int
, 再運(yùn)算
五、字符串類型
String
是Java中一種引用數(shù)據(jù)類型,用于表示文本字符串,這里簡單的說一下基礎(chǔ)用法。
在Java中使用String
類定義字符串類型,比如:
public static void main(String[] args) {
String s1 = "hello";
String s2 = " world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2); // s1+s2表示:將s1和s2進(jìn)行拼接
}
在有些情況下,需要將字符串和整形數(shù)字之間進(jìn)行轉(zhuǎn)換。
1、int轉(zhuǎn)String
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);
2、String轉(zhuǎn)int
String str = "100";
int num = Integer.parseInt(str);