Java | 空字符串和null

空字符串

  • 类型: "" 是一个空字符串,长度为0,在内存中分配一个空间,可以使用 Object 对象中的方法。例如"".toString()
  • 内存分配Stirng str = "":表明声明一个字符串类型的引用,其值""为空字符串,这个 str 引用指向的是空字符串 "" 的内存空间

null

  • 类型:null 表明一个对象的值,不是一个字符串,并没有分配内存,比如String str = null
  • 内存分配String str = null:表明声明一个字符串对象的引用,但其指向一个null,也就是说没有指向任何内存空间
String str1 = ""     // str对应一个空串,声明对象的引用
String str2 = null   // str2引用为空
String str3 = new String()      //str3指向具体的String实例, 默认为""

**注意**:str1和str3都被实例化,都指向了内存中的空间,虽然str1和str2指向的地址不一样,但是值是一样的,都是"",而str2没有被实例化


比较

由于 null 不是对象,"" 是对象,所以比较的方式是

str1.equals("")     //对象用equals方法来比较
str2 == null        //null用==来比较


总结

  1. Java中有两种比较大小的方式:==equals方法,前者是根据地址来比较,只有地址和值都相等,则两者才相等;后者则是根据变量的值比较大小,只要值相等,两者便相等。
  2. 在Java中变量和变量引用都是存在栈 (stack) 中,而对象 (new出来的)都是存放在堆 (heap) 中的,例如:
    String a = new Stirng("ABC") //a存放在栈中,而ABC这个值存放在堆中,a指向ABC在堆中的地址

你可能感兴趣的:(Java | 空字符串和null)