Java的基本数据类型以及相关传递引用

2018.7.21 偷懒了一段时间没写博客~请痛批我。。。。

一、Java的数据类型:

1.基本数据类型:

(1) byte  字节型 长度:8bit  范围:-2^7 ~ 2^7-1;

(2) short  短整型 长度:16bit  范围:-2^15 ~ 2^15-1;(最高位为符号位,故是2的15次方,同理下)

(3) long  长整型 长度:64bit  范围:-2^63 ~ 2^63-1;

(4) int  整型 长度:32bit  范围:-2^31 ~ 2^31-1;

(5) float  浮点单精度型 长度:32bit  范围:-2^15 ~ 2^15-1;

(6) double  浮点双精度型 长度:64bit  范围:-2^63 ~ 2^63-1;

(7) char  字符型 长度:16bit  范围:0 ~ 2^16-1;

(8) boolean 布尔类型   true | false

2.引用数据类型:

类、接口、数组、抽象类

二、基本数据类型的参数传递:

1.基本数据类型:

当有以下代码时:int i = 10 ;

想一下,i存放了什么?是数据十呢还是存放这个数据的地址呢?

答案是数据10!为什么呢?因为基本数据类型开辟空间的时候是存放在栈中的,不是堆,如果放在堆就需要传地址到栈中(引用数据类型就是如此)

那再来看,int L =i ;

此时L存放的又是啥呢?数据10吗?

答案是指向这个数据10的地址。你可以把L 和 i想象成int的两个对象,对象在赋值的时候是不是修改一个对象的地址,使其指向另一个对象的地址?答案当然是啦。

那我再i++。从常识来判断此时的L肯定还是10,但i变成11了。哎你刚刚不是说L指向是i存储数据的地址吗?怎么又是10了啊?容我细细给你道来:

L是指向i的地址没错,但这是i没发生变化之前。当i的值发生变化时,系统就会在变量L所在的内存空间开辟一个位置来存放i没有改变之前的值。

执行完int L = i 后 ;

执行了i++后:

 

所以这就是为什么L还是10的原因。

2.引用数据类型:

引用数据类型的传递有一种特殊:String,一般也不使用这种数据进行参数传递。因为String是拷贝了一份去传递的,传了出去就传不回来了。通俗的讲:String  str =“Hello”,你将它传给一个函数,假设这个函数是对字符串添加一个字母a吧。然后你分别在函数里面输出以下这个str 和在main函数里面输出一下这个str,你会惊奇的发现这两者居然不等!我str不是改变了吗??原因就是我上面说的。

引用数据类型的传参是怎么样的呢?

引用数据类型传递是参数的地址,比如传递对象的时候,引用参数存储在堆中,而它的地址存储在栈中,所以就是为什么两个String不用==比较的原因,因为用来比较的是存放它们的地址,两个String的地址总不可能相等吧?因此引用类的数据传递的是存储它的地址。

不信的话,写个程序来验证一下,假如我有两个字符串str1="HelloWorld",str2="HelloWorld",人眼就可以看出这两个字符串是相等的。

因此两个String比较时用equals()方法。

猜你喜欢

转载自blog.csdn.net/weixin_42294984/article/details/81146811