1、演示變量以及使用
變量的創(chuàng)建:
byte b = 1;
數(shù)據(jù)類型:byte
變量名:b ---- 標識符
賦值符號: = ---- 和數(shù)學不一樣
變量值:1
使用變量:
通過變量名贱案,調(diào)用變量
注意:
方法內(nèi)聲明的變量稱之為局部變量
限制:只聲明不可用
class VarDemo00
{
public static void main(String[] args){
byte b = 1;
System.out.println(b);
b = 2;
System.out.println(b);
}
}
2魏身、演示字面值常量
1惊橱、當直接使用一個數(shù)據(jù)時,在內(nèi)存會給他分配空間
2箭昵、這塊內(nèi)存沒有別名
3税朴、稱呼這塊內(nèi)存是通過稱呼它的值完成的---- 字面值
4、這塊內(nèi)存沒別名家制,以后不可使用正林,所以二進制的表示形式不可以在改變 ---- 常量
final修飾的常量
1、這塊內(nèi)存有別名
2颤殴、通過別名可以找到內(nèi)存
3觅廓、這塊內(nèi)存使用final做了特殊標記 ---- 編譯器發(fā)現(xiàn)試圖更改它是,會拋出異常
使用字面值常量:
沒有顯示的指定數(shù)據(jù)類型涵但,如果是整形的杈绸,系統(tǒng)默認分配4個byte
小數(shù)型默認8個byte
字符型是2個byte
布爾型是1個byte
class VarDemo01
{
public static void main(String[] args){
//System.out.println(1);
//final byte b = 1;//聲明了一個變量帖蔓,名字是b,對應的內(nèi)存的值不可以改變
//b = 2;
System.out.println("b");
//整數(shù)
System.out.println(100);
//小數(shù)
System.out.println(2.34);
//字符型
System.out.println('A');
//布爾型
System.out.println(true);
}
}
3瞳脓、注意:賦值操作時塑娇,變量值要在數(shù)據(jù)類型的取值范圍之內(nèi)
class VarDemo02
{
public static void main(String[] args){
/**
有兩塊內(nèi)存:
A、字面值1的內(nèi)存 ---- 默認四個字節(jié)
B劫侧、聲明的變量 ------- 1個字節(jié)
C埋酬、將四個字節(jié)的數(shù)據(jù)存儲進一個字節(jié)
*/
byte b = 300;
System.out.println(b);
}
}
4、數(shù)據(jù)類型
在Java中烧栋,設置了不同的數(shù)據(jù)類型写妥,不同的數(shù)據(jù)類型有不同的空間和取值范圍,使用時审姓,根據(jù)需求進行選擇
變量的類型:
1耳标、基本數(shù)據(jù)類型
整 型:
byte ------ 1字節(jié) ----- 8bit
short ------ 2字節(jié) ----- 16bit
int ------ 4字節(jié) ----- 32bit
long ------ 8字節(jié) ----- 64bit
浮點型:
float ------ 4字節(jié) ----- 32bit
double ----- 8字節(jié) ----- 64bit
字符型:
char ------- 2字節(jié) ----- 16bit -----無符號
布爾型:
boolean ---- 1字節(jié) ----- 只有一個bit進行標志
2、引用類型
"Hello World !"
賦值測試時出現(xiàn)的問題:
1邑跪、long類型數(shù)據(jù)賦值是:正數(shù)過大次坡,拋出錯誤
為什么?
A画畅、因為如果數(shù)據(jù)是整型砸琅,默認四個字節(jié)
B、當long類型的變量值超出int取值范圍時轴踱,默認的四個字節(jié)不能滿足取值范圍
C症脂、編譯器拋出異常
解決:
當數(shù)據(jù)超出范圍時,后綴L或l
告知編譯器淫僻,不要使用默認的四個字節(jié)分配诱篷,而是使用8個字節(jié)分配
2、強制要求
只要聲明long類型數(shù)據(jù)雳灵,無論變量值大小棕所,都后綴L
小數(shù)型問題:
當為float賦值時,可能損失精度
為什么悯辙?
小數(shù)型默認的是八個字節(jié)琳省,而float只有四個字節(jié),可能產(chǎn)生數(shù)據(jù)丟失
解決:
在小數(shù)后綴F或f躲撰,告知編譯器按四個字節(jié)分配
問題:
byte b = 1;
float f = 1.0;
byte類型賦值時针贬,有一個默認的檢測,檢測是否超出取值范圍
還會隱式轉(zhuǎn)換拢蛋,而float沒有隱式轉(zhuǎn)換
char型只可以存儲一個字符:
使用注意:\ \r\n \t
底層實現(xiàn):char類型本質(zhì)是一個數(shù)字
編碼表 ----- 數(shù)字與字符是有對應關系的
char類型如何運作的:
A桦他、本質(zhì)是數(shù)字
B、顯示時查編碼表谆棱,顯示對應的字符
C快压、亂碼問題 ---- 使用的編碼表不一致
class VarDemo03
{
public static void main(String[] args){
byte b = 1;
short s = 11;
int i = 100;
long l = 1000;
long l2 = 1000000000000000L;
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);
System.out.println(l2);
//-------------------------------
float f = 1.0F;
double d = 2.0;
System.out.println(f);
System.out.println(d);
//-------------------------------
//char c = 'AB';非法
char c = 'A';
System.out.println(c);
char c2 = '\'';//注意:是\而不是/若用/則不能運行
System.out.println(c2);
System.out.println("\"Hello World\"");//"HelloWorld"
System.out.println("---------------------------------");
char c3 = 'a';
int i1 = (int)c3;//將字符轉(zhuǎn)換成數(shù)字
int i2 = (int)'b';
System.out.println(i1);
System.out.println(i2);
//--------------------------------------
boolean b1 = true;
boolean b2 = false;
System.out.println(b1);
System.out.println(b2);
}
}
5圆仔、賦值
將變量賦值給變量
問題描述:
降低進度數(shù)據(jù)賦值給高進度,是安全的
但是將高進度數(shù)據(jù)賦值給低進度嗓节,可能出現(xiàn)數(shù)據(jù)丟失
解決:
使用強制轉(zhuǎn)換
低精度變量 = (低精度數(shù)值類型)高精度變量;
存在的問題:
1荧缘、強轉(zhuǎn)導致數(shù)據(jù)丟失
2皆警、舍棄二進制高位
精度排序拦宣,取值范圍的排序
整型:byte < short < int < long
小數(shù)型:float < double
經(jīng)測試:int類型和long類型精度都小于float類型
float雖然只是四個字節(jié),但是由于算法不同信姓,float的取值范圍 > int 且 > long
byte < short < int < long < float < double
char類型 ----- 無符號 [0,65535]
byte和char精度沒有可比性
short和char精度沒有可比性
int 和 char int的精度高于char
class VarDemo04
{
public static void main(String[] args){
/*byte b = 1;
byte b2 = 2;
System.out.println(b);
System.out.println(b2);
b = b2;
System.out.println(b);
System.out.println(b2);*/
byte b = 1;
short s = 200;
//s = b;
b = (byte)s;//-56
System.out.println(b);
int i = 100;
float f = 1.0f;
f = i;
//i = f;
System.out.println(f);
long l = 10L;
float f2 = 1.0f;
//f2 = l;
//l = f2;
System.out.println(f2);
System.out.println("----------------------------------");
byte b2 = 10;
char c = 'A';
//c = b2;
b2 = c;
System.out.println(c);
System.out.println(b2);
}
}
6鸵隧、基本數(shù)據(jù)類型運算
問題:數(shù)據(jù)運算時,運算結(jié)果可能超出接收的數(shù)據(jù)的數(shù)據(jù)類型的取值范圍
接收的數(shù)據(jù)的數(shù)據(jù)類型無論多大意推,都有可能超出取值范圍
怎么解決:
1豆瘫、如果參與的數(shù)據(jù)的數(shù)據(jù)類型 <= int,默認結(jié)果是 int 類型的
2、如果參與的數(shù)據(jù)的數(shù)據(jù)類型 > int,那么結(jié)果提升為參與運算的最高數(shù)據(jù)類型
class VarDemo05
{
public static void main(String[] args){
byte b1 = 127;
byte b2 = 127;
short s1 = 1;
int i5 = 1;
int sum = b1 + b2 + s1 + i5;
System.out.println(i5);
long l1 = 100;
int i1 = 10;
l1 = l1 + i1;
System.out.println(l1);
int i2 = 1;
int i3 = 2;
i2 = i2 + i3;
System.out.println(i2);
}
}
class VarDemo06
{
public static void main(String[] agrs){
byte sum1 = 1 + 2;//編譯期間菊值,直接算出了 1+2 -----byte sum1 = 3;
System.out.println(sum1);
byte b1 = 1;
byte b2 = 2;
byte sum2 = (byte)(b1 + b2);
System.out.println(sum2);
}
}