您现在的位置是:首页 > 正文

引用数据类型_Java基础数据类型和引用类型的区别

2024-04-01 03:21:59阅读 2

一、数据类型

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

1、基本数据类型

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

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:通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般

public class Main{
public static void main(String[] args){
//基本数据类型
int i=1;
double d=1.2;

//引用数据类型
String str="helloworld";
}
}

ccab89be184357d0db1c1681ad4de9b2.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;
    }
    }

     引用变量类型

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

0d6e51faf381b3daa20bc298723c4ce9.png

有不对的地方请指正

网站文章

  • MySQL查询优化

    MySQL查询优化

    表数据皆为随机生成,身份证号、手机号、姓名、微信号等若有相同,纯属巧合。生成的数据仅用于测试说明问题,不必理会合理性。2.1.1、【用户表】t_user数据量:150w。

    2024-04-01 03:21:52
  • MySQL JDBC编程

    MySQL JDBC编程

    简单介绍了JDBC编程及对功能进行了封装。

    2024-04-01 03:21:11
  • 系统架构与高可用

    系统架构与高可用

    前言 简单聊聊博主的背景吧,博主是Java开发,刚毕业就来到这个刚创立的公司(当然是有一点背景的),公司开发人数从80来人到现在的430人,期间系统进行多次调整。 而我除了写代码业务实现外,刚好有机会接触了一些类似架构、运维、以及新系统初期设计讨论的工作,这大大满足了我的好奇心,这是幸运的。 我大部分的知识是从工作中学习到的,开始知识点是零散,喜欢做笔记,一旦遇到我们没有听过的技术名词或者业...

    2024-04-01 03:21:04
  • SpringCloud负载均衡原理

    SpringCloud负载均衡原理org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer private Respo...

    2024-04-01 03:20:15
  • 安装Anaconda的注意事项

    安装Anaconda的注意事项

    Anaconda是Python的集成安装包,把Python中常用的库都集成了,对于初学者来说还是很友好的,不过在安装过程中也有一些陷阱,下面把我自己安装中碰到的问题记录一下: 对系统的要求 WIN10...

    2024-04-01 03:20:08
  • 如何训练一个词向量

    如何训练一个词向量

    现在在NLP领域,词向量是一切自然语言处理的基础,有了词向量我们就可以进行数据分析,文本聚类分类的一系列操作了。接下来我们就开始学习如何训练词向量,之前我们有介绍关于 word2vec 的博文 wor...

    2024-04-01 03:20:01
  • Google浏览器(Chrome)快捷键大全

    Chrome窗口和标签页快捷键:Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shift+N 在隐身模式下打开新窗口 Ctrl+O,然后选择文件 在谷歌浏览器中打开计算机上的文件 按住 Ctrl 键,然后点击链接 从后台在新标签页中打开链接,但您仍停留在当前标签页中 按住 Ctrl+Shift 键,然后点击链接 在新标签页中打开链接,同时切换到新打开的标签

    2024-04-01 03:19:54
  • Material-UI 5 即将推出

    Material-UI 5 即将推出

    编者导语你好,我是小弋。‍‍‍‍Material-UI 4 发布已经快两年了,终于,Material-UI 5 来了。我们今天来看看,到底推出哪些值得我们关注的信息。从官网我们可以看到此次...

    2024-04-01 03:19:08
  • Android Bitmap变迁与原理解析(4.x-8.x)

    Android Bitmap变迁与原理解析(4.x-8.x)

    App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是很多OOM的元凶,不过,在不同的Android版本中,Bitmap或多或少都存在差异,尤其是在其内存分配上,了解其中的不用跟原理能更好的指导图片管理。先看Google官方文档的说明:On Android ...

    2024-04-01 03:19:02
  • 图解SSL/TLS协议

    图解SSL/TLS协议

    一、SSL协议的握手过程开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。假定客户端叫做爱丽丝,服务器叫做鲍勃,整个握手过程可以用下图说明(点击看大图)。握手阶段分成五步。第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。第二步,鲍勃确认双方使用的加密方法,并给...

    2024-04-01 03:18:22