java知識點總結(數據類型)
1,數據類型
java數據類型有八大基本數據類型
1,基本類型
具體可分爲四類
- 整形:byte short int long
- 浮點型:float double
- 邏輯型:boolean
- 字符型:char
八大類型的默認值
序號 | 數據類型 | 位數 | 字節數 | 封裝類 | 可表示數據範圍 |
---|---|---|---|---|---|
1 | byte(位) | 8 | 1 | Byte | -128~127 |
2 | short(短整數) | 16 | 2 | Short | -32768~32767 |
3 | int(整數) | 32 | 4 | Integer | -2147483648~2147483647 |
4 | long(長整數) | 64 | 8 | Long | -9223372036854775808~9223372036854775807 |
5 | float(單精度) | 32 | 4 | Float | 1.4E-45~3.4028235E38 |
6 | double | 64 | 8 | Double | 4.9E-324~1.7976931348623157E308 |
7 | char(字符) | 16 | 2 | Character | 0~65535 |
8 | boolean | 8 | Boolean | true或false |
2,類型的轉換
簡單類型數據的轉換分兩種:自動轉換和強制轉換,通常發生在表達式中或者方法中參數的傳遞
自動轉換
具體講就是一個較”小“的數與一個較“大”的數進行運算時,系統將自動的把較”小“的數轉換爲較”大“的數,再進行運算。這些類型由”小“到”大“分別爲(byte,short,char)–int–long–float–double,byte short char他們是平級的。這裏說的”大“和“小”並不是指佔用字節大小,而是表示值的範圍大小。
例如:short i;int a = i;long l = i;float f = l;double d = f;
強制轉換
將”大“數據轉換爲”小“數據時,你可以使用強制轉換。即你必須採用下面這種語句格式: int n=(int)3.14159/2;可以想象,這種轉換肯定可能會導致溢出或精度的下降。
3,==與equal的區別
1,對於基本類型來說,只能使用==,因爲基本類型沒有equal方法。基本類型的比較使用==,比較的是它們的值。
2,引用類型(例如String類)纔有equal方法,因爲String繼承Object類,而equal是Object的通用方法。對於該類型對象來說,在沒有重寫的的情況下,==與equal是相同的,都是比較它們在內存中的存放地址(準確來說就是堆內存),就是是否指向同一個對象。還有一種重寫的情況,如String、Integer、Data,它們則比較成員變量值是否相同。
1)沒有重寫
equal的源碼:
public boolean equals(Object obj){
return (this==obj)
}
從源碼中看出沒有重寫的情況相當與==,比較內存中存放的地址。
2)equal被重寫,例如String類
@Override public boolean equals(Object other) {
if (other == this) {
return true;
}
if (other instanceof String) {
String s = (String)other;
int count = this.count;
if (s.count != count) {
return false;
}
if (hashCode() != s.hashCode()) {
return false;
}
char[] value1 = value;
int offset1 = offset;
char[] value2 = s.value;
int offset2 = s.offset;
for (int end = offset1 + count; offset1 < end; ) {
if (value1[offset1] != value2[offset2]) {
return false;
}
offset1++;
offset2++;
}
return true;
} else {
return false;
}
}
上述代碼可以看出,String類中被複寫的equals()方法其實是比較兩個字符串的內容。
下面來看例子:
public class StringDemo {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // true
}
7 }
s1和s2來自同一個對象,用==比較s1和s2,所以是true。
public class StringDemo {
public static void main(String args[]) {
String str1 = "Hello";
String str2 = new String("Hello");
String str3 = str2; // 引用傳遞
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str3)); // true
}
}
str1str2:因爲str2是重新new了一個對象,所以str1和str2不是指向同一個對象,所以false。
str1str3:因爲str3和str2指向同一個對象,與str1指向對象不同,所以false。
str1.equal(str2):因爲String重寫了equal方法,所以比較的是字符串內容是否相同。
如果還不懂,可以看下面的圖,再看代碼。