首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「干货」基本数据类型和引用数据类型的区别

「干货」基本数据类型和引用数据类型的区别

作者头像
用户7656790
发布2020-09-01 10:08:42
1.5K0
发布2020-09-01 10:08:42
举报

图丨pixabay

今天继续来讲面试,已经出了很多java一面真题系列文章了,之后也会整理成一个系列,欢迎持续关注哦。

话说干了这么多年的开发,只知道会用,怎么用,用什么,隐约也知道了为什么用,但为啥JAVA总像一个犹抱琵琶半遮面的女子,总让人看不透,看不腻?应该就是基础不扎实了。所以面试的时候却经常会被问到,我们根据面经来进行补短板,查漏补缺。下面开始今天的干货内容吧,走起,记得点赞,点击在看哦。

背景

新语言Kotlin已经抛弃了Java里的基本数据类型,而是采用引用类型去声明一个变量,那么怎么区分基本数据类型和引用类型呢?

文字概念

基本数据类型:byte、short、int、long、float、double、char、boolean 引用类型:类(class)、接口(interface)、数组(array) 基本类型保存的值,引用类型保存了是对象的地址,所有基本类型赋值是按值传递(拷贝赋值),引用类型赋值是按引用传递。

图与代码解析

一:搞清楚 基本类型 和 引用类型的不同之处
int num = 10;
String str = "hello";

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

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

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

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

第一个例子:基本类型

void foo(int value) { 
    value = 100;
}
foo(num); // num 没有被改变

第二个例子:没有提供改变自身方法的引用类型

void foo(String text) { 
    text = "windows";
}
foo(str); // str 也没有被改变

第三个例子:提供了改变自身方法的引用类型

StringBuilder sb = new StringBuilder("iphone");
void foo(StringBuilder builder) {
     builder.append("4");
}
foo(sb); // sb 被改变了,变成了"iphone4"。

第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。

StringBuilder sb = new StringBuilder("iphone");
void foo(StringBuilder builder) { 
      builder = new StringBuilder("ipad");
}
foo(sb); // sb 没有被改变,还是 "iphone"。

重点理解为什么,第三个例子和第四个例子结果不同? 下面是第三个例子的图解:

builder.append("4")之后

下面是第四个例子的图解:

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

参考: https://www.zhihu.com/question/31203609/answer/50992895

所有巧合的是要么是上天注定要么是一个人偷偷的在努力。

结束!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五角钱的程序员 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 文字概念
  • 图与代码解析
    • 一:搞清楚 基本类型 和 引用类型的不同之处
      • 二:搞清楚赋值运算符(=)的作用
        • 三:调用方法时发生了什么?参数传递基本上就是赋值操作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档