美文网首页Java架构技术栈
Java中的基本数据类型与引用数据类型

Java中的基本数据类型与引用数据类型

作者: 若丨寒 | 来源:发表于2021-01-22 17:49 被阅读0次

    一、基本数据类型

    • byte、short、int、long(整数类型)
    • float、double(浮点数类型)
    • char(字符型)
    • boolean(布尔类型 )
    Java中的基本数据类型与引用数据类型

    Java数据大多数存放在堆栈中。

    • 栈区:存放局部变量,对象声明的引用等。
    • 堆区:存放 new关键字 创建的类(包含成员变量)和数组等。

    堆与栈的优缺点

    • 栈的优点:栈数据可以 共享 ,存取速度比堆 。 缺点是:存在栈中 数据大小与生命周期是确定 的。
    • 堆的优点:可以 动态分配内存大小 ,生存期也不必事先告诉编译器。缺点是:存取速度较

    举个栗子,如下图:

    Java中的基本数据类型与引用数据类型
    • 编译器会在栈中创建一个a的引用,然后在栈中查找字面值为5的引用,将a指向5的地址,若没有找到,就会开辟一个地址来存放字面值5,然后再将a指向该地址。定义int c=5;因为栈中存在字面值5,所有c会直接指向5的地址。令a=8,因为栈中没有字面值为8的引用,所有会开辟一个地址存放8,a会重新指向8的地址,c的指向不受a影响,c的值不会改变。

    二、引用数据类型

    1. Class(类)

    2. Interface(接口)

    3. Array(数组)

    • Java是 面向对象 语言,它为每一个基本数据类型都做了相应的包装类(见上一个表格),也就是实现了基本类型变量到 包装类对象的转换。引用类型一般通过 new关键字 来创建,(对象)它存放在内存的 中,可以在运行时 动态的分配内存大小 。引用变量中存放的是变量内容的地址,它存放在内存的 中。当引用类型变量不被使用时,Java内部的垃圾回收器 GC会自动回收

    1.代码示例-Class:

    public class Demo {
        String Name;
        int Age;
        double Score;
        Demo(String Name,int Age,double Score){
            //定义带三个参数的构造函数,进行初始化
            this.Name=Name;
            this.Age=Age;
            this.Score=Score;
        };
        public static void main(String[] args) {
            Demo d1=new Demo("小吴",20,98);
            Demo d2=new Demo("小天",19,80);
        }
      }
    
    Java中的基本数据类型与引用数据类型
    • 引用本身是保留在 中的,而引用所指的对象是存放在 中的。

    2.代码示例-Interface

    interface Animal {//定义Animal接口
          public void eat();
          public void speak();
    }
    public class Dog implements Animal {//Dog类实现Animal接口 
          public void eat() {
                System.out.println("我喜欢吃骨头!");
        }
          public void speak() {
                System.out.println("汪汪汪!");
        }
          public static void main(String[] args) {
                Dog d=new Dog();
                d.eat();
                d.speak();
        }
    }
    
    • 编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
    • 接口与类的区别:
    1. 接口不能用于实例化对象。
    2. 接口没有构造方法。
    3. 接口中所有的方法必须是抽象方法。
    4. 接口不能包含成员变量,除了 static 和 final 变量。
    5. 接口需要被类实现。
    6. 接口支持多继承。

    3.代码示例-Array

    public class Array {
          public static void main(String[] args) {
                int[] myList = new int[] {5,2,0,1,3,1,4};
          for(int list: myList) {
                System.out.print(list);
          }
          }
    }
    
    • 在以上代码中,myList变量存放了数组对象的引用,它存放到栈中,而数组对象所占的空间在堆上被分配(和上图一样)。

    拓展1:

    • 方法的返回值类型为类名:返回该类的对象。
    • 方法的返回值类型为接口名:返回该接口的实现类的对象。
    public static Comparable findMax(Comparable[] arr) {
          int maxIndex=0;
          for(int i=1;i<arr.length;i++)
                if(arr[i].compareTo(arr[maxIndex])>0)
                      maxIndex=i;
          return arr[maxIndex];
     }
    
    • 上述代码中,传递参数为实现了Comparable接口的对象数组,方法返回的是Comparable接口的实现类的对象。
    • 我们通常会使用Object、接口类型等方式来表示泛型,目的是支持代码重用。

    拓展2:自动装箱与拆箱

    • 自动装箱:如果一个int型量被传递到需要一个Integer对象的地方,编译器将在幕后插入一个对Integer构造方法的调用。
    • 自动装箱:如果一个Integer对象被放到需要int型量的地方,则编译器将在幕后插入一个对intValue方法的调用。

    来源:https://www.tuicool.com/articles/URJ7za6

    相关文章

      网友评论

        本文标题:Java中的基本数据类型与引用数据类型

        本文链接:https://www.haomeiwen.com/subject/pjkezktx.html