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

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

  • 基本数据类型:byte、short、int、long、float、double、char、boolean
  • 引用类型:类(class)、接口(interface)、数组(array)

基本类型保存的是,引用类型保存的是对象的地址,所有基本类型赋值是按值传递(拷贝赋值),引用类型赋值是按引用传递。

一:基本类型和引用类型的不同之处

int num = 10;

String str = "hello";

image

如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。

二:赋值运算符(=)的作用

image

  • 对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
  • 对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变。如上图所示,"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)

三:调用方法时发生了什么?参数传递基本上就是赋值操作

  1. 基本类型

void foo(int value){value = 100};

foo(num);

num没有被改变

  1. 没有提供改变自身方法的引用类型

void foo(String text){text = "Windows"};

foo(str);

str也没有被改变

  1. 提供了改变自身方法的引用类型

StringBuilder sb = new StringBuilder("iphone");

void foo(StringBuilder builder){builder.append("4");}

foo(sb);

sb被改变了,变成了“iphone4”

图解:

image

builder.append("4")后:

image

  1. 提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。

StringBuilder sb = new StringBuilder("iphone");

void foo(StringBuilder builder) { builder = new StringBuilder("ipad");}

foo(sb);

sb 没有被改变,还是 "iphone"

图解:

image

builder = new StringBuilder("ipad"); 之后

image

posted @   雪碧锅仔饭  阅读(1112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示