java基礎篇day1,java數據類型、轉換、進制轉換
一、java數據類型劃分
1、數值型:
1.1. 整形
byte 1字節 8位 -128~127
1字節等於8bit,8位,每一位有兩種可能,2的8次方256,表示正負,故取值範圍-2的七次方至2的7次方
short 2字節 16位 -32768~32767
2字節等於16bit,16位,每一位有兩種可能,2的16次方,表示正負,故取值範圍-2的15次方至2的15次方,int,long以此類推
int 4字節 32位 -2^31~2^31-1
long 8字節 64位 2^63~2^63-1,必須以大寫L或者小寫l結尾
1.2.浮點類型:
float 4字節 32位 -3.403E38 ~ 3.403E38
單精度,尾數可以精確到7位有效數字。很多情況下,精度很難滿足需求。變量值末尾要以F或者f結尾
同樣4個字節,float比long值還大,是因爲它是用佔得的字節表示10的幾次冪
double 8字節 64位 -1.798E308 ~ 1.798E308
雙精度,精度是float的兩倍。通常採用此類型。範圍更大,精度更高
2、 字符型:
char 2字節 16位 0~65535
Java中的所有字符都使用Unicode編碼,故一個字符可以存儲一個字母,一個漢字,或其他書面語的一個字符。
字符型變量的三種表現形式:
1. 字符常量是用單引號(‘ ’)括起來的單個字符。例如:char c1 = 'a'; char c2
= '中'; char c3 = '9';
2. Java中還允許使用轉義字符‘\’來將其後的字符轉變爲特殊字符型常量。
例如:char c3 = ‘\n’; // '\n'表示換行符
3. 直接使用 Unicode 值來表示字符型常量:‘\uXXXX’。其中,XXXX代表
一個十六進制整數。如:\u000a 表示 \n。
3、布爾型:
boolean true false
4、引用類型:
字符串 String、 類 class 、枚舉 enum、接口interface、數組array
二、基本數據類型之間的轉換
1、自動類型轉換:範圍小→範圍大
byte→short→int→long→float→double;
char→int→long→float→double
2、強制類型轉換:範圍大→範圍小
需要加強制轉換符
3、練習
/*
基本數據類型之間的運算規則:
前提:這裏討論只是7種基本數據類型變量間的運算。不包含boolean類型的。
1. 自動類型提升:
結論:當容量小的數據類型的變量與容量大的數據類型的變量做運算時,結果自動提升爲容量大的數據類型。
byte 、char 、short --> int --> long --> float --> double
特別的:當byte、char、short三種類型的變量做運算時,結果爲int型
2. 強制類型轉換:見VariableTest3.java
說明:此時的容量大小指的是,表示數的範圍的大和小。比如:float容量要大於long的容量
*/
class VariableTest2 {
public static void main(String[] args) {
byte b1 = 2;
int i1 = 129;
//編譯不通過
//byte b2 = b1 + i1;
int i2 = b1 + i1;
long l1 = b1 + i1;
System.out.println(i2);
float f = b1 + i1;
System.out.println(f);
short s1 = 123;
double d1 = s1;
System.out.println(d1);//123.0
//***************特別地*********************
char c1 = 'a';//97
int i3 = 10;
int i4 = c1 + i3;
System.out.println(i4);
short s2 = 10;
//char c2 = c1 + s2;//編譯不通過
byte b2 = 10;
//char c3 = c1 + b2;//編譯不通過
//short s3 = b2 + s2;//編譯不通過
//short s4 = b1 + b2;//編譯不通過
//****************************************
}
}
/*
強制類型轉換:自動類型提升運算的逆運算。
1.需要使用強轉符:()
2.注意點:強制類型轉換,可能導致精度損失。
*/
class VariableTest3 {
public static void main(String[] args) {
double d1 = 12.9;
//精度損失舉例1
int i1 = (int)d1;//截斷操作
System.out.println(i1);//12
//沒有精度損失
long l1 = 123;
short s2 = (short)l1;
//精度損失舉例2
int i2 = 128;
byte b = (byte)i2;
System.out.println(b);//-128
}
}
class VariableTest4 {
public static void main(String[] args) {
//1.編碼情況1:
long l = 123213;
System.out.println(l);//int自動提升爲long型,所以不用加L或者l
//編譯失敗:過大的整數
//long l1 = 21332423235234123;
long l1 = 21332423235234123L;
//****************
//編譯失敗
//float f1 = 12.3;//默認12.3是double,double轉float報錯
float f1 = (float)12.3;
//2.編碼情況2:
//整型常量,默認類型爲int型
//浮點型常量,默認類型爲double型
byte b = 12;
//byte b1 = b + 1;//編譯失敗
int b1 = b + 1;
//float f1 = b + 12.3;//編譯失敗
double f1 = b + 12.3;
}
}
/*
String類型變量的使用
1. String屬於引用數據類型,翻譯爲:字符串
2. 聲明String類型變量時,使用一對""
3. String可以和8種基本數據類型變量做運算,且運算只能是連接運算:+
4. 運算的結果仍然是String類型
*/
class StringTest {
public static void main(String[] args) {
String s1 = "Hello World!";
System.out.println(s1);
String s2 = "a";
String s3 = "";
//char c = '';//編譯不通過
//***********************
int number = 1001;
String numberStr = "學號:";
String info = numberStr + number;// +:連接運算
boolean b1 = true;
String info1 = info + b1;// +:連接運算
System.out.println(info1);
//***********************
//練習1
char c = 'a';//97 A:65
int num = 10;
String str = "hello";
System.out.println(c + num + str);//107hello
System.out.println(c + str + num);//ahello10
System.out.println(c + (num + str));//a10hello
System.out.println((c + num) + str);//107hello
System.out.println(str + num + c);//hello10a
//練習2
//* *
System.out.println("* *"); //輸出* *
System.out.println('*' + '\t' + '*');//輸出93, char類型加法運算
System.out.println('*' + "\t" + '*');//輸出* *,"\t"string類型表示連接
System.out.println('*' + '\t' + "*");//輸出51*,第一個加好表示加法第二個連接
System.out.println('*' + ('\t' + "*"));//輸出* *
//練習3
String str1 = 4; //判斷對錯:no
String str2 = 3.5f + “”; //判斷str2對錯:yes
System.out.println(str2); //輸出:”3.5”
System.out .println(3+4+“Hello!”); //輸出:7Hello!
System.out.println(“Hello!”+3+4); //輸出:Hello!34
System.out.println(‘a’+1+“Hello!”); //輸出:98Hello!
System.out.println(“Hello”+‘a’+1); //輸出:Helloa1
//練習4
1)short s = 5;
s = s-2; //判斷:no,int
2) byte b = 3;
b = b + 4; //判斷:no int
b = (byte)(b+4); //判斷:yes
3)char c = ‘a’;
int i = 5;
float d = .314F;
double result = c+i+d; //判斷:yes
4) byte b = 5;
short s = 3;
short t = s + b; //判斷:no ,int
//***********************
//String str1 = 123;//編譯不通過
String str1 = 123 + "";
System.out.println(str1);//"123"
//int num1 = str1;
//int num1 = (int)str1;////編譯不通過
int num1 = Integer.parseInt(str1);
System.out.println(num1);//123
}
}
三、進制轉換
對於整數,有四種表示方式:
- 二進制(binary):0,1 ,滿2進1.以0b或0B開頭。
- 十進制(decimal):0-9 ,滿10進1。
- 八進制(octal):0-7 ,滿8進1. 以數字0開頭表示。
- 十六進制(hex):0-9及A-F,滿16進1. 以0x或0X開頭表示。此處的A-F不區分大小寫。
如:0x21AF +1= 0X21B0
1、二進制轉10進制
- Java整數常量默認是int類型,當用二進制定義整數時,其第32位是符號位;
- 當是long類型時,二進制默認佔64位,第64位是符號位
- 二進制的整數有如下三種形式:
- 原碼:直接將一個數值換成二進制數。最高位是符號位
- 負數的反碼:是對原碼按位取反,只是最高位(符號位)確定爲1。
- 負數的補碼:其反碼加1。
- 計算機以二進制補碼的形式保存所有的整數。
- 正數的原碼、反碼、補碼都相同
- 負數的補碼是其反碼+1
- 最高位爲符號位:0:正數,1:負數
- 00001110轉換爲10進製爲:1 * 2^3 + 1 * 2^2 + 1* 2^1 = 14
10111011未知負數補碼-1變爲10111010,除符號位取反11000101
計算:2^1+ 2^3+ 2^7= -69
2、 十進制轉二進制
3、二進制轉八進制和十六進制