前言
大家好呀!這是筆者的java板塊,今天起筆者開始了java部分的相關(guān)學(xué)習(xí),會(huì)不定期更新java的文章。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
變量和類型
變量指的是程序運(yùn)行時(shí)可變的量,相當(dāng)于開辟一塊內(nèi)存空間來(lái)保存一些數(shù)據(jù)。
類型則是對(duì)變量的種類進(jìn)行了劃分,不同的類型的變量具有不同的特性。
我們討論的“變量”和我們的“內(nèi)存”這樣的硬件設(shè)施密切相關(guān)
(圖片來(lái)自比特就業(yè)課)
變量相當(dāng)于一個(gè)箱子,可以存放一些數(shù)據(jù)
類型相當(dāng)于箱子的種類,不同類型,意味著箱子種類不一樣,種類不一樣,箱子存儲(chǔ)的東西自然是不一樣的
1 整形int
public class TestDemo { public static void main(String[] args) { int a=10; System.out.println(a);//打印10 System.out.println(Integer.MAX_VALUE);//打印2147483647,Integer是java的一個(gè)包裝類,是一個(gè)簡(jiǎn)單類型,你可以理解Integer就是int System.out.println(Integer.MIN_VALUE);//打印-2147483648 //和c語(yǔ)言一樣,整形int不管你系統(tǒng)是16位、32位還是64位,int類型統(tǒng)一占4字節(jié) //區(qū)別c語(yǔ)言,java里的整形int是沒有無(wú)符號(hào)類型的,數(shù)字統(tǒng)一都有符號(hào) //int是4字節(jié),也就是32比特位,32位中的最高位是符號(hào)位(1為負(fù),0為正) //除去32位中的符號(hào)位剩余的31位分別對(duì)應(yīng)1和0兩種情況,所以最大是2^31-1=2147483647 //ps:為什么2^31要-1,因?yàn)榉?hào)位是0的2^31種情況中有0這種情況,正數(shù)要-1 //最小的是-2^31=-2147483648 //變量的命名:小駝峰->由數(shù)字、字母、下劃線、美元符號(hào)組成 int 錢=100;//有意思的是java可以用中文來(lái)做變量名 System.out.println(錢);//打印100,不會(huì)報(bào)錯(cuò) } }
整形數(shù)據(jù)范圍示意圖
2 長(zhǎng)整形long
數(shù)據(jù)范圍這里和上面整形思路一樣,long是8個(gè)字節(jié),64比特位,最高位符號(hào)位,所以最大值2^ 63-1, 最小值-2^63
public static void main(String[] args) { long a=10;//ps:寫long a=10L或者long a=10l(小寫的L)結(jié)果都是一樣的 System.out.println(a);//打印10 System.out.println(Long.MAX_VALUE);//打印2^63-1=9223372036854775807 System.out.println(Long.MIN_VALUE);//打印-2^63=-9223372036854775808 }
注意:java中沒有l(wèi)ong long類型
3 雙精度浮點(diǎn)型(重點(diǎn))
double類型占8個(gè)字節(jié)
public static void main(String[] args) { double d=3.1415926;//double是8個(gè)字節(jié) System.out.println(d);//打印3.1415926 int a=1; int b=2; System.out.println(a/b);//打印0,java中int除int還是int型,如果要得到小數(shù)必須除數(shù)或被除數(shù)至少有一個(gè)是double型 int c=1; double f=2; System.out.println(c/f);//打印0.5 }
4 單精度浮點(diǎn)型
float類型占4個(gè)字節(jié)
public static void main(String[] args) { //float a=1.1; // 1.1java默認(rèn)是一個(gè)double類型,對(duì)于c語(yǔ)言來(lái)說(shuō)double型到float型是可以通過(guò)的,只是會(huì)報(bào)警告 //但對(duì)于java來(lái)說(shuō)只要類型不匹配,就不能運(yùn)行,一定會(huì)報(bào)錯(cuò) float a=1.1f;//要想1.1是float類型,后面要跟一個(gè)f或者F }
5 字符型
char(java中占2個(gè)字節(jié))
1.java中使用單引號(hào)+單個(gè)字母的形式表示字符字面值
2.計(jì)算機(jī)中的字符本質(zhì)是一個(gè)整數(shù),在C語(yǔ)言中用ASCII表示字符,而java中使用的是Unicode表示字符。因此一個(gè)字符占用兩個(gè)字節(jié),表示的字符種類更多,包括中文
public static void main(String[] args) { char ch="a"; System.out.println(ch);//打印a char dh="嘿";//一個(gè)漢字2個(gè)字節(jié),char是2個(gè)字節(jié),所以這里也是可以賦值的 System.out.println(dh);//打印“嘿” char eh=97; System.out.println(eh);//打印a,賦值是整數(shù)給char類型的話,會(huì)自動(dòng)轉(zhuǎn)換為數(shù)字對(duì)應(yīng)的字符 }
6 字節(jié)類型
byte類型占1個(gè)字節(jié)(聯(lián)想c語(yǔ)言中的char)
public static void main(String[] args) { byte b=10; System.out.println(b);//這里正常打印10 //byte c=130;//這里會(huì)報(bào)錯(cuò) //為什么10可以130就不可以呢? //byte是1個(gè)字節(jié),8比特位,除去符號(hào)位只有7比特位 //7比特位最高是127,最低是-128 //所以byte類型的范圍是-128-127 }
在java中,數(shù)值類型都是有取值范圍的,存儲(chǔ)數(shù)據(jù)的時(shí)候,不要超過(guò)范圍,否則編譯無(wú)法通過(guò)。
7 短整型
short類型占2個(gè)字節(jié)
public static void main(String[] args) { short s=10;//short類型的取值范圍是-2^16到2^16-1 System.out.println(s);//打印10 }
8 布爾類型
public static void main(String[] args) { boolean flg1=true;//非0為真,0為假 System.out.println(flg1);//java中布爾類型只有兩種情況:true或false boolean flg2=false; System.out.println(flg2); //JVM沒有明確規(guī)范布爾類型的大小。有些書說(shuō)1bit有些書說(shuō)1字節(jié) //布爾類型不能進(jìn)行數(shù)值運(yùn)算,比如flag+1這種都是不行的 }
注意:
1.boolean類型的變量只有兩種取值,true為真,false為假
2.java的boolean類型和int不能相互轉(zhuǎn)換,不存在 1表示true,0表示false
3.boolean類型有些JVM的實(shí)現(xiàn)是占1個(gè)字節(jié),有些是占1個(gè)比特位,這個(gè)沒有明確規(guī)定。
9 字符串類型(重點(diǎn))
把一下字符放到一起構(gòu)成字符串
String 變量名=“初始值”
public static void main(String[] args) { String str="hello"; System.out.println(str); String str2="world"; System.out.println(str+str2);//可以把兩個(gè)字符串拼接起來(lái) System.out.println(str+10+20);//其他數(shù)據(jù)類型與字符串類型使用+拼接,結(jié)構(gòu)是一個(gè)字符串 //打印hello1020,10跟著hello已經(jīng)變成字符串了,所以不會(huì)與20相加 System.out.println(10+30+str); //打印40hello,解釋:因?yàn)橛?jì)算機(jī)讀這段代碼是從左到右,兩int型還沒變成字符串算起來(lái)是40 System.out.println(str+(10+20));//如果要打印hello30,加個(gè)括號(hào)即可 System.out.println("a="+10+",b="+20);//a=10,b=20 String s1=""bit"";//現(xiàn)在要打印”bit“,只要對(duì)兩邊的雙引號(hào)轉(zhuǎn)義即可 System.out.println(s1); }
10 變量的作用域
也就是該變量能生效的范圍,一般是變量定義所在的代碼塊,也就是大括號(hào){}
public static void main(String[] args) { int a=10; { a=99; } System.out.println(a);//打印99 { int b; } //System.out.println(b);//無(wú)法打印b,已經(jīng)出了b的作用域 }
11 變量的命名規(guī)則
硬性指標(biāo):
1.一個(gè)變量名只能包含數(shù)字、字母、下劃線
2.數(shù)字不能作為開頭
3.變量名是大小寫敏感的,舉例說(shuō)明:num和Num是兩個(gè)不同的變量
ps:語(yǔ)法上雖然運(yùn)行使用中文/美元符號(hào)($)命名,但是強(qiáng)烈不推薦這樣做
軟性指標(biāo):
1.變量命名要具有描述性,見名知意
2.變量名不宜使用拼音
3.變量名的詞性推薦使用名詞
4.變量命名推薦小駝峰命名法,當(dāng)一個(gè)變量名由多個(gè)單詞構(gòu)成時(shí),除了第一個(gè)單詞之外,其他首字母大寫
比如maxValue
12 常量
常量:
1.字面值常量:比如單純一個(gè)數(shù)字,或者字符串等等
2.final修飾的變量會(huì)變成常量
ps:常量和變量的簡(jiǎn)單區(qū)別:
常量就是程序運(yùn)行時(shí)不可改變的量
變量就是程序運(yùn)行時(shí)可以改變的量
public static void main(String[] args) { final int c=10;//final修改的變量就不能修改了,類似c語(yǔ)言中的const //c=2;//c不可修改,該句c=2會(huì)報(bào)錯(cuò) System.out.println(c); }
13 強(qiáng)制類型轉(zhuǎn)換
public static void main(String[] args) { int a=10;//int是4字節(jié) long b=a;//long是8字節(jié) System.out.println(b);//4字節(jié)賦給8字節(jié)沒有問(wèn)題 long c=12; //int d=c;//8字節(jié)賦給4字節(jié)會(huì)報(bào)錯(cuò) int d=(int)c;//強(qiáng)制類型轉(zhuǎn)換后才能賦值 boolean e=true; //int f=(int)e;//兩個(gè)毫不相關(guān)的類型就算是強(qiáng)轉(zhuǎn)也不能賦值 }
long表示的范圍更大,可以將int賦值給long,但是不能將long賦值給int。就好比我們現(xiàn)在把西瓜和芝麻里面掏空,你可以把空芝麻放到空西瓜里,但是不能把西瓜塞到芝麻里,如果你非要塞,好,請(qǐng)你把西瓜切的和芝麻一樣大,也就是把long強(qiáng)制轉(zhuǎn)換成int
結(jié)論:不同數(shù)字類型的變量之間賦值,表示范圍更小的類型能隱式轉(zhuǎn)換成范圍更大的類型
注意:int和boolean這種完全不相干的類型,即使強(qiáng)制類型轉(zhuǎn)換也是不能賦值的(boolean根本表示數(shù)值類型)
14 理解數(shù)值提升
public static void main(String[] args) { byte a=1;//byte是1個(gè)字節(jié),也就是4bit位,那它的有效范圍應(yīng)該是-128-127 byte b=2; //byte c=a+b;這里會(huì)報(bào)錯(cuò):小于4字節(jié)運(yùn)算時(shí)會(huì)把變量自動(dòng)提升到整形,整形后賦給byte是不可以的 byte c=(byte)(a+b);//要賦值a+b要對(duì)他們的結(jié)果強(qiáng)制類型轉(zhuǎn)換 byte d=1+2;//這里為什么不報(bào)錯(cuò)呢?1和2都是常量,程序編譯的時(shí)候1+2就已經(jīng)編譯成3了 //也就是說(shuō)上一行代碼==byte d=3; int a1=10; long a2=20; //int a3=a1+a2;這里運(yùn)算時(shí),小類型會(huì)提升為大類型,這里a1會(huì)提升到long類型,直接寫會(huì)報(bào)錯(cuò) int a3=(int)(a1+a2);//必須對(duì)結(jié)果進(jìn)行強(qiáng)轉(zhuǎn) String e=String.valueOf(a1);//把int型轉(zhuǎn)換為String類型 System.out.println(e); //整數(shù)變字符串法二 String f=a1+"";//整數(shù)加字符串就變字符串了 System.out.println(f); }
15 int和String類型的相互轉(zhuǎn)換
public static void main(String[] args) { int a1=10; String e=String.valueOf(a1);//把int型轉(zhuǎn)換為String類型 System.out.println(e);//打印字符10 //整數(shù)變字符串法二 String f=a1+"";//整數(shù)加字符串就變字符串了 System.out.println(f); }
總結(jié)
本文介紹了java的所有數(shù)據(jù)類型,強(qiáng)制類型轉(zhuǎn)換和數(shù)值提升是本文的重點(diǎn),但在實(shí)際運(yùn)用中,我們還是推薦減少不同類型混用的情況,防止出錯(cuò)。以上,祝讀者學(xué)習(xí)愉快,事業(yè)有成,希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/m0_57180439/article/details/120709287