当前位置: 首页 > article >正文

基本数据类型与引用数据类型的区别(java基础)

八大基本数据类型

基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数
:

1,-----byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

2,-----short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0

3,----- int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0

4,-----long:长整型,在内存中占64位,即8个字节-263~263-1,默认值0L

5-----,float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

6,-----double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

7,-----char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空

8,-----boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
:
🍟 引用数据类型

引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏

:
所有的非基本数据类型都是引用数据类型, 大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型,还有Double,Byte,Long,Float,Char,Boolean,Short(注意这里和基本类型相比首字母是大写)
🍟 值传递
🍧传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值

public class Main{
   public static void main(String[] args){
     int msg = 100;
     System.out.println("调用方法前msg的值:\n"+ msg);//100
     update(msg);
     System.out.println("调用方法后msg的值:\n"+ msg);//结果还是100
   }
   public static void update(int temp){
       temp = 0;
   }
}

由上可以看出,传递基本数据类型时,形参的改变,不影响实际参数的值
:
🍧传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值

public class Main{
public static void main(String[] args){
    int[] msg = {1,2,3};
    //我们直接输出数组,返回的是他的地址值
    System.out.println(msg);//  [I@2503dbd3
    System.out.println("调用方法前值:\n"+ msg[0]);//1
    update(msg);
    System.out.println("调用方法后值:\n"+ msg[0]);//0
}
    public static void update(int[] msg){
        msg[0] = 0;
    }
}

由上可以看出,传递引用数据类型时,传递的是地址值,形参的改变,将地址里面的值改变了,影响实际参数的值
🍟 猜想:

不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于对象类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上

:
🍟装箱和拆箱

我们将基本数据类型转化为引用数据类型的过程叫做装箱,相应的,我们把从引用数据类型转化为基本数据类型的过程叫做拆箱
:

public static void main(String[] args) {
		//创建两个Integer对象
		Integer x=new Integer("10");
		Integer y=new Integer("10");
		//创建两个int类型变量
		int m=10;
		int n=10;
		//valueOf的作用是将int变量转化成Integer对象
		//将int类型变量“手动”装箱
		Integer m1=Integer.valueOf(m);
		Integer n1=Integer.valueOf(n);
		
		//intValue的作用是将Integer对象转化成int类型
		//将Integer对象“手动”拆箱
		int v1=x.intValue();
		int v2=y.intValue();
}

http://www.kler.cn/news/159641.html

相关文章:

  • 【软件测试】技术精选:Jmeter常见的几种报错
  • 云HIS:新一代云架构医院信息管理系统源码(java语言)
  • Flink流批一体计算(24):Flink SQL之mysql维表实时关联
  • 2、RocketMQ源码分析(二)
  • 前端并发多个请求并失败重发
  • Opencv框选黑色字体进行替换(涉及知识点:selectROI,在控制台输入字体大小,颜色,内容替换所选择的区域)
  • ORACLE使用Mybatis-plus批量插入
  • vue select选择下拉组织树,解决不出现横向滚动条
  • C#用MathNet生成矩阵,并打印矩阵元素
  • 智能优化算法应用:基于冠状病毒群体免疫算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Python list tuple dict set的文件持久操作
  • acwing算法基础之时空复杂度分析
  • MFC对话框集成OSG无法响应键盘事件
  • 使用Pytorch从零开始实现BERT
  • python爬虫-某公开数据网站实例小记
  • vue中el-upload结合vuedraggable实现图片的上传、排序、删除以及预览等功能
  • 2023-12-01 AndroidR 系统在root目录下新建文件夹和创建链接,编译的时候需要修改sepolicy权限
  • 创建腾讯云存储桶---上传图片--使用cos-sdk完成上传
  • 简介Kadane算法及相关的普通动态规划
  • RepidJson将内容格式化后写入文件
  • 【OpenSSH升级】升级后证书认证登录突然失效
  • C语言能判断一个变量是int还是float吗?
  • 若依框架 前台自己获取登录用户信息
  • 矩阵处理—转圈打印矩阵
  • HomeAssistant如何添加HACS插件实现公网控制米家与HomeKit等智能家居
  • Redis的基本数据类型及常用命令
  • Codeforces Round 913 (Div. 3) A~E(F,G更新中)
  • ES6迭代器
  • Elasticsearch一些函数查询
  • 【头歌系统数据库实验】实验4 MySQL单表查询