一、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