前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工作这么多年了,你知道JAVA中基本数据类型和引用数据类型的区别吗?

工作这么多年了,你知道JAVA中基本数据类型和引用数据类型的区别吗?

作者头像
余生大大
发布2022-11-02 15:29:18
2530
发布2022-11-02 15:29:18
举报
文章被收录于专栏:余生大大

摘要:

在比较中==与equals对基本数据类型与引用数据类型的引用是不一样的,==对基本数据类型比较的是值,对引用数据类型比较的是地址,而equals默认比较的是地址,对基本数据类型会在比较完引用地址后再比较值是否相等,但是像String、Integer等包装的引用数据类型重写了equals来让他们的equals变为值的比较

基本数据类型在传递中是传递的值,引用数据类型在传递中是传递的变量副本地址


一. 数据类型

java中数据类型分为两种,基本数据类型和引用数据类型

1. 基本数据类型

No.

数据类型

大小/位

可表示数据范围

默认值

1

byte(字节型)

8

-128~127

0

2

short(短整型)

16

-32768~32767

0

3

int(整型)

32

-2147483648~2147483647

0

4

long(长整型)

64

-9223372036854775808~9223372036854775807

0

5

float(单精度)

32

-3.4E38~3.4E38

0.0

6

double(双精度)

64

-1.7E308~1.7E308

0.0

7

char(字符)

16

0~255

'\u0000'

8

boolean(布尔)

-

true或false

false

2. 引用数据类型

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

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

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

1. 存储位置

基本变量类型

  • 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的

引用变量类型

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

2. 传递方式

基本变量类型

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

引用变量类型

  • 引用数据类型变量,调用方法时作为参数是按引用传递的,传递的是引用的副本
代码语言:javascript
复制
//引用数据类型作为方法参数被调用

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 数据类型
  • 二. 基本数据类型和引用数据类型的区别
    • 1. 存储位置
      • 2. 传递方式
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档