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。
str1
str3:因爲str3和str2指向同一個對象,與str1指向對象不同,所以false。
str1.equal(str2):因爲String重寫了equal方法,所以比較的是字符串內容是否相同。
如果還不懂,可以看下面的圖,再看代碼。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章