一、null和""空字符串的區別
null不指向任何對象,至關於沒有任何值,null不分配內存空間
""表明一個長度爲0的字符串,""會分配內存空間
字符串類型的默認值爲nulljava
二、成員變量在new對象初始化的時候,會默認的給上初始值(默認值)
在方法中的局部變量沒有初始值,要使用的話,必須先賦值函數
三、字符串類型屬於引用類型,棧中的引用指向堆裏的對象
一個String對象在 堆內存 中建立之後, 就不能被改變了
請注意String對象的全部方法都不會改變其自己,而是會返回一個新的String對象.對象
四、java對String類型作了特殊處理
String a = "123";
String b = "123";
System.out.println(a.equals(b)); 輸出true
System.out.println(a==b); 輸出true內存
正常狀況下,比較對象是否相等
String a1 = new String("aaa");
String b1 = new String("aaa");
System.out.println(a1.equals(b1)); 輸出true
System.out.println(a1 == b1); 輸出false字符串
五、實參和與其對應的形參各佔用獨立的存儲單元class
參數爲基本數據類型
基本數據類型實參傳遞到形參的是值,形參的改變不會影響實參
static int [] a ;
public static int[] way(int[] a) {
a = new int[5];
return a;
}
public static void main(String[] args) {
a = new int[3];
way(a) ;
System.out.println(a.length); 輸出3
a = way(a);
System.out.println(a.length); 輸出5
}test
參數爲引用類型,實參傳遞到形參的是地址
public class Manager {
String name;
int age;
public void manager(Manager m) {
m.name = "張三" ;
m.age = 23;
System.out.println(m.name+"\t"+m.age );
}
}變量
public class Test{
public static void main(String[] args) {
Manager m = new Manager();
m.name = "李四";
m.age = 22;構造函數
//將實參的地址傳遞給形參,實參與形參指向同一個對象
m.manager(m);
System.out.println(m.name+"\t"+m.age );
} 數據類型
}
運行:
張三 23
張三 23
public class Manager {
String name;
int age;
public void manager(Manager m) {
//在此處給形參m,從新new一個對象,形參m會指向新的地址
m = new Manager();
m.name = "張三" ;
m.age = 23;
System.out.println(m.name+"\t"+m.age );
}
}
public class Test{
public static void main(String[] args) {
Manager m = new Manager();
m.name = "李四";
m.age = 22;
//將實參的地址傳遞給形參,實參與形參指向同一個對象
m.manager(m);
System.out.println(m.name+"\t"+m.age );
}
}
運行:
張三 23
李四 22
六、實例化一個對象的過程:
一、加載父類(有直接父類的狀況下)
二、在堆內存中開闢空間,分配內存
三、對對象屬性進行默認初始化
四、調用對應的構造方法進行初始化
五、在構造方法中,第一行先調用父類的構造方法進行初始化
六、進行子類構造函數初始化
若是一個函數的static修飾的成員變量是引用類型,那麼就算這個函數進行屢次實例化,它的static修飾的引用類型成員變量也只會實例化一次
public class Book {
Test04 test1 = new Test04();
public Book (int num) {
System.out.println("book"+num);
}
static Test04 test2 = new Test04();
}
public class Test04 { public Test04() { System.out.println("Test04"); } public static void main(String[] args) { Book book1 = new Book(1); Book book2 = new Book(2); } } 運行: Test04 Test04 book1 Test04 book2