Java中的基本数据类型和引用数据类型的区别

本文深入解析Java中的数据类型,涵盖基本数据类型如整数、浮点数、字符和布尔类型,以及引用数据类型如类、接口、数组等。同时对比了基本数据类型与引用数据类型的存储位置和传递方式,为理解Java内存管理和数据操作提供关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据类型

Java中的数据类型分为两大类,基本数据类型和引用数据类型。

1、基本数据类型

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

No.数据类型大小/位可表示数据范围默认值
1byte(字节型)8-128~1270
2short(短整型)16-32768~327670
3int(整型)32-2147483648~21474836470
4long(长整型)64-9223372036854775808~92233720368547758070
5float(单精度)32-3.4E38~3.4E380.0
6double(双精度)64-1.7E308~1.7E3080.0
7char(字符)160~255'\u0000'
8boolean(布尔)-true或falsefalse

2、引用数据类型

引用数据类型非常多,大致包括:
类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型

例如,String类型就是引用类型。
简单来说,所有的非基本数据类型都是引用数据类型。

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

1、存储位置

基本变量类型
  • 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的
引用变量类型
  • 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
    ps:通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般
public class Main{
   public static void main(String[] args){
       //基本数据类型
       int i=1;
       double d=1.2;
       
       //引用数据类型
       String str="helloworld";
   }
}

1537987-20181117143815305-1391925376.png

2、传递方式

基本变量类型
  • 在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递
//基本数据类型作为方法参数被调用
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;
   }
}

1537987-20181117152204524-2019844954.png

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

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在栈中的内存被释放掉

1537987-20181117160912759-229459932.png

开通博客园来的第一篇博文,有不对的地方请大家多多指正,我将会做出及时更改。

转载于:https://www.cnblogs.com/maskwolf/p/9972982.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值