1、null和""空字符串的区别
null不指向任何对象,相当于没有任何值,null不分配内存空间
""代表一个长度为0的字符串,""会分配内存空间
字符串类型的默认值为null
2、成员变量在new对象初始化的时候,会默认的给上初始值(默认值)
在方法中的局部变量没有初始值,要使用的话,必须先赋值
3、字符串类型属于引用类型,栈中的引用指向堆里的对象
一个String对象在 堆内存 中创建以后, 就不能被改变了
请注意String对象的所有方法都不会改变其本身,而是会返回一个新的String对象.
4、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
5、实参和与其对应的形参各占用独立的存储单元
参数为基本数据类型
基本数据类型实参传递到形参的是值,形参的改变不会影响实参
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
}
参数为引用类型,实参传递到形参的是地址
public class Manager {
String name;
int age;
public void manager(Manager m) {
m.name = "张三" ;
m.age = 23;
System.out.println(m.name+" "+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+" "+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+" "+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+" "+m.age );
}
}
运行:
张三 23
李四 22
6、实例化一个对象的过程:
1、加载父类(有直接父类的情况下)
2、在堆内存中开辟空间,分配内存
3、对对象属性进行默认初始化
4、调用对应的构造方法进行初始化
5、在构造方法中,第一行先调用父类的构造方法进行初始化
6、进行子类构造函数初始化
如果一个函数的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