java中引用类型和基本类型的区别

java中引用类型和基本类型的区别

一、数据类型

1.基本类型

基本数据类型只有8种,可按照如下分类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean

2.引用类型:

引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型。
简单来说,所有的非基本数据类型都是引用数据类型。

二、基本类型和引用数据类型的区别

1、存储位置

基本变量类型
在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的
引用变量类型
只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
ps:通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般

public class Main{
   public static void main(String[] args){
       //基本数据类型
       int i=1;
       double d=1.2;
   //引用数据类型
   String str="hi world!";
      }
}

由以上代码可以画出该类型在内存中的存储情况

2.传递方式

2.1基本变量类型

  • 在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递
//基本数据类型作为方法参数被调用
public class Main{
   public static void main(String[] args){
       int msg = 100;
       System.out.println("调用方法前msg的值:\n"+ msg);    //100
       fun(msg);
       System.out.println("调用方法后msg的值:\n"+ msg);    //100
   }
   public static void fun(int temp){
       temp = 0;
   }
}

2.2 引用变量类型

  • 引用数据类型变量,调用方法时作为参数是按引用传递的,传递的是引用的副本
//引用数据类型作为方法参数被调用

class Book{
    String name;
    double price;

    public Book(String name,double price){
        this.name = name;
        this.price = price;
    }
    public void getInfo(){
        System.out.println("图书名称:"+ name + ",价格:" + price);
    }

    public void setPrice(double price){
        this.price = price;
    }
}

public class Main{
   public static void main(String[] args){
       Book book = new Book("Java开发指南",66.6);
       book.getInfo();  //图书名称:Java开发指南,价格:66.6
       fun(book);
       book.getInfo();  //图书名称:Java开发指南,价格:99.9
   }

   public static void fun(Book temp){
       temp.setPrice(99.9);
   }
}

调用时为temp在栈中开辟新空间,并指向book的具体内容,方法执行完毕后temp在栈中的内存被释放掉

总而言之言而总之:基本数据类型存储在栈中,而引用数据类型首先要在栈上给其分配一块内存,而对象的具体信息存储在堆内存上,由栈上引用指向堆中对象的地址。

该文章借鉴于https://www.cnblogs.com/maskwolf/p/9972982.html

你可能感兴趣的:(java,java,开发语言,java-ee)