在Java语言中,除了那八种基本数据类型整型:byte short int long浮点型:float double字符型:char布尔型:boolean,其它类型都是引用类型;也可以说任何一个对象都是引用类型;
image.png
int a=10;a是基本数据类型;
Data d=new Date():d是引用类型;
integer 是引用数据类型,是int的封装类型,默认值为null,创建该类型需要进行实例化。 基本数据类型是可以用“==”进行比较,而引用数据类型则不可以,一般是通过equals方法来实现比较。
String 类型就是引用类型。 简单来说,所有的非基本数据类型都是引用数据类型。

  • 引用类型使用=赋值;
  • 除了String,包装器类**(共八个)外,都需要使用new关键词;
  • 引用类型可以使用==,!,=进行比较,比较的是引用类型的地址,不是内容;
  • 引用类型不能使用>,>=,<=,<进行比较; ```java //声明两个引用类型变量s1,s2,并使用new进行赋值 String s1=new String(“Hello”); //此处不考虑使用=直接赋值的情况 String s2=new String(“Hello”); //此处不考虑使用=直接赋值的情况

//使用==及!=比较s1和s2的地址 System.out.println(“s1==s2”+s1==s2); System.out.println(“s1!=s2”+s1!=s2);

  1. s1==s2比较的是栈中s1s2的值,由于s1s2指向堆中不同的内存空间,所以s1s2的值不同。因此比较返回false![image.png](https://cdn.nlark.com/yuque/0/2021/png/12826755/1627546862069-bff28798-caa4-4adc-bc13-4d3d6e9f93a5.png#align=left&display=inline&height=273&margin=%5Bobject%20Object%5D&name=image.png&originHeight=273&originWidth=355&size=7773&status=done&style=none&width=355)
  2. - 当只声明了一个引用类型,却没有为其赋值,则此时该变量为null
  3. ```java
  4. public class Item{
  5. //此处不考虑static含义,后续学习;只为了能在main方法中访问;
  6. static String s;
  7. public static void main(String[] args){
  8. System.out.println(s);
  9. }
  10. }

image.png

空字符串(“”)和null和空格字符串(“ “)的区别

1、类型
null表示的是一个对象的值,而并不是一个字符串。
例如声明一个对象的引用,String a = null ;
“”表示的是一个空字符串,也就是说它的长度为0,但它是一个字符串。
例如声明一个字符串String str =“” ;
2、内存分配
String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间;
String str = “”; 表示声明一个字符串类型的引用,其值为””空字符串,这个str引用指向的是空字符串的内存空间;
“” :分配了内存 ,分配了一个空间
null :未分配内存
“ “ :分配了内存,分配了一个空间

  1. string str1 = ""; //空字符串 str1.length() 等于 0
  2. string str2 = null; //NULL
  3. string str3 = " "; //空格串 str3.length() 等于 1

在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是存放在堆中(heap):
1、表示区别
string str1 = “”; //空字符串 str1.length() 等于 0
string str2 = null; //NULL
string str3 = “ “; //空格串 str3.length() 等于 109

2、内存区别
“” :分配了内存 ,分配了一个空间
null :未分配内存
“ “ :分配了内存

3、使用区别
调用null的字符串的方法会抛出异常。
“”是一个字符串(String).它在内存中是存在的.它可以使用Object对象中的方法(如””.toString();””.equals()) 。
null它是一个空对象,在内存中是不存在的。它不可以使用Object对象中的方法。

备注:
空格:本质上和abc一样,它是一个字符。它的数值(ASCII)是32
‘\0’ :代表字符串的结束,数值(ASCII)是0

  • 在JDK1.5之后,Java中多了一个新的类型——枚举;
  • 枚举也是一种引用类型
  • 在使用enum关键值可以声明一个枚举;

    1. public enum ltem0302{
    2. MON,TUE,WED,THU,FRI,SAT,SUN;
    3. }
  • 枚举编译后也生成.class文件,也是一种引用类型

  • 在jdk1.5之后,Java中增加了注解(Annotation);
  • 注解也称为元数据,是和类,接口,枚举,并列的一种引用类型;
  • Java API中定义了系列注解类型,称为内置注解,如

    1. @Override
    2. public String toString(){
    3. return super.toString();
    4. }
  • 除了直接使用API中的注解外,还可以自定义注解类型;