java基本數據類型及其他基礎

1,java當中的8大基本數據類型(不包括String)byte(8位) short(16) int(32) long(64) float(32) double(64) boolean char(16爲unicode){當聲明變量爲char的時候,char c = 'a' 轉化爲其他的時候會取它的編碼值 int a = c 輸出97}。上述的低可以自動向高轉,容量大的轉小的需要強制轉換。基本數據類型存在於棧中,數組和引用數據類型存在於堆當中。
對於基本數據類型的聲明,int a 系統會給a開闢了內存空間。
對於應用類型的聲明,Apple a 系統給a存了地址,沒有空間。

int a = 1;
            int b;
            b=a;
            a = 2;
            System.out.println(b);

基本類型的賦值當中,首先在常量池裏新增了一個1,並且a指向它,a=b的時候,b和a指向同一個常量,a=2,這時候改變了a的地址指向,但是不影響b的地址指向。如果還有int c = 2;它首先會檢測在常量池裏面有沒有2,有的話指向同一個,沒有會新增一個2。

如果是一個引用類型的賦值,a和b共同指向堆裏面的一個變量,通過a對堆發生的改變,b也會隨之改變。

String解釋傳送門
String,如果是String s = "asd" 這時候注意不一定創建了一個對象,這時候是在棧區。如果String ss = new String("asd") 這時候是在堆區,再次new的話,用==(這是比較地址)兩個new出來的不相等。

2,對於java包裝類:包裝類等同於一個適配器,因爲在集合裏面不可以放基本數據類,必須轉換爲包裝類(jdk5後會自動轉換了,所以看不到new Integer這些操作)。
同時基礎數據類型不是都可以強制轉換了,栗子 :int 和string
int轉string(要通過integer)1,integer.toString() 2,String.valueOf() {String和integer都是代之},3,i+”“,i在運算的時候自動轉換爲String
(都是通過Integer,有Integer聲明的變量的就用變量.,沒有的用Integer
String轉int :str作參數傳進Integer,int a = Integer.parseInt(str); int b = Integer.valueOf(str).intValue()

3,修飾符
protected 修飾符指定,對同一包內的類和所有子類可見。

private修飾的變量要通過get ,set來訪問,不能通過訪問屬性的方式訪問。

父類中聲明爲 private 的方法,不能夠被繼承。

static 關鍵字用來聲明獨立於對象的靜態變量,無論一個類實例化多少對象,它的靜態變量只有一份拷貝。 靜態變量也被稱爲類變量。局部變量不能被聲明爲 static 變量。

final修飾的變量,基本數據類型不能改變值,但是可以改變引用。

synchronized 關鍵字聲明的方法同一時間只能被一個線程訪問。確保線程安全,volatile 就是動態改變共享內存的值,使其具有共享的特性。(方法訪問類變量就是共享內存了,多用於線程當中,static是實例化後)

4,StringBuffer比較安全,StringBuilder比較快,對於頻繁的(因爲可以 .append)string類型操作使用這兩個而不是string

5,java數組,是說某某數組,比如字符串數組String[],由String堆積起來的數組。這就解釋了ArrayList泛型。

6,String類裏面是根據值來計算hashcode的,所以值相等,hashcode就相等。

7,java淺複製和深複製,還有複製。首先最簡單的的=,把引用複製給另外一個變量,裏面的值發生改變會影響其他變量。

  @Override
         protected Object clone() throws CloneNotSupportedException {
             //Person person = (Person) super.clone();
             //person.name = (String)this.name.clone();
             return super.clone();
         }

如果重寫了object裏面的object方法,

  Person p = new Person("hejian", 100);
        Person p1;
        try {
            p1 = (Person)p.clone();

這種複製方式會複製一個新的對象,就是對象的hashcode不會相同,但是這屬於淺複製,對象的屬性仍是複製引用(可以說對象於對象屬性由地址引用),如果這個屬性是非string引用類型

 Student newStudent = (Student) super.clone();
        newStudent.professor = (Professor) professor.clone();
        return newStudent;

把屬性也複製值,但是要是string類型的話,需要思考如何實現,如7下的代碼。
傳送門
任意門

未完待續..

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