java中值类型和引用类型的不同实例(二)

在java中,数组是对象,所以也是种引用类型。

以下示例代码会展示 一 数组中的值为基本类型 二 数组中的值为对象 三 数组的直接赋值和clone赋值

示例1 基本类型数组赋值

 1 public class Topcoder
 2 {
 3     public static void  main(String[] args)
 4     {
 5         int[]a={2,3,4};
 6         int[]b=a;
 7         System.out.print(a[0]+" ");
 8         System.out.println(b[0]);
 9         b[0]=0;
10         System.out.print(a[0]+" ");
11         System.out.println(b[0]);
12     }
13 }

output:

2 2
0 0

代码分析,行6把a赋值给b,代表a和b指向同一对象。所以当b[0]改变时,a[0]也随之改变。

示例2 基本类型数组克隆赋值

 1 public class Topcoder
 2 {
 3     public static void  main(String[] args)
 4     {
 5         int[]a={2,3,4};
 6         int[]b=a.clone();
 7         System.out.print(a[0]+" ");
 8         System.out.println(b[0]);
 9         b[0]=0;
10         System.out.print(a[0]+" ");
11         System.out.println(b[0]);
12     }
13 }

代码分析,行6把a的克隆赋值给b,现在有两份数组副本,a指向原本的第一份,b指向第二份。所以当b[0]改变时,a[0]不受其影响。

output为:

2 2
2 0

示例3 引用类型数组赋值

 1 class Number
 2 {
 3     public int num;
 4 }
 5 public class Topcoder
 6 {
 7     public static void  main(String[] args)
 8     {
 9         Number[]a=new Number[3];
10         a[0]=new Number();
11         a[0].num=2;
12         Number[]b=a;
13         System.out.print(a[0].num+" ");
14         System.out.println(b[0].num);
15         b[0].num=0;
16         System.out.print(a[0].num+" ");
17         System.out.println(b[0].num);
18     }
19 }

output为:

2 2
0 0

分析如示例1

示例4 引用类型数组克隆赋值

 1 class Number
 2 {
 3     public int num;
 4 }
 5 public class Topcoder
 6 {
 7     public static void  main(String[] args)
 8     {
 9         Number[]a=new Number[3];
10         a[0]=new Number();
11         a[0].num=2;
12         Number[]b=a.clone();
13         System.out.print(a[0].num+" ");
14         System.out.println(b[0].num);
15         b[0].num=0;
16         System.out.print(a[0].num+" ");
17         System.out.println(b[0].num);
18     }
19 }

output为:

2 2
0 0

示例4 a的clone赋值给b,a和b指向了不同的数组副本。但是里面的对象的引用是相同的,即a[0]和b[0]是指向同一对象的。只不过储存a[0],b[0]的位置是不同的。

时间: 2024-08-09 10:44:07

java中值类型和引用类型的不同实例(二)的相关文章

java中值类型和引用类型的不同实例(一)

简单分类,java中除了值类型就是对象.值类型就是java中的基本类型,而除了这些基本类型都是对象. [内存] “一个具有值类型(value type)的数据存放在栈内的一个变量中.即是在栈中分配内存空间,直接存储所包含的值,其值就代表数据本身. 值类型的数据具有较快的存取速度. 一个具有引用类型(reference type)的数据并不驻留在栈中,而是存储于堆中.即是在堆中分配内存空间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址.当访问一个具有引用类型的数据时,需要到

java中值类型和引用类型的不同实例(三)

毫无疑问,函数传值和函数传引用的区别是 传值是传一份数据拷贝 传引用的话 是可以操纵对象. 但是一般人忽略的是传引用其实也是传一份引用的副本. 示例如下: 1 class Number 2 { 3 public int num; 4 } 5 public class Topcoder 6 { 7 public static void main(String[] args) 8 { 9 Number a=new Number(); 10 a.num=1; 11 Number b=new Numbe

Java中值类型与引用类型

JAVA中值类型和引用类型的不同? 1.定义 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变:值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现. 2.分类 (1)值类型 值类型也就是基本数据类型 基本数据类型常被称为四类八种. 四类:1.整型 2.浮点型 3.字符型4.逻辑

Java中值类型和引用类型的区别

[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字符型4,逻辑型 八种: 1,整型3种 by

JAVA 关于值类型和引用类型的区别

Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现. [值类型]也就是基本数据类型 基本数据类型常被称为四类八种四类:   1,整型 2,浮点型 3,字符型4,逻辑型八种:     

C#中值类型和引用类型的区别浅记

C#中值类型和引用类型的区别浅记 在C#中,变量的类型分为两种,分别是值类型和引用类型. 值类型的变量直接存储值,说得更具体一些,就是值类型变量在内存中直接存储它们自身的值,如代码所示, int x = 2: 值类型变量x,在内存中的某处直接存储了它自身的值:2. 引用类型的变量存储的是对其对象的引用,更进一步说,就是引用类型变量在内存中直接存储了一个指向它处的引用,而引用所指的对象则保存在引用类型变量所指的内存中.如代码所示, public class Thing { int x; } Thi

内存角度看c#中值类型和引用类型的区别(转)

1.    值类型的数据存储在内存的栈中:引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址. 2.     值类型存取速度快,引用类型存取速度慢. 3.     值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用 4.     值类型继承自System.ValueType,引用类型继承自System.Object 5.     栈的内存分配是自动释放:而堆在.NET中会有GC来释放 6.      值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的

C#中值类型和引用类型

本文将介绍C#类型系统中的值类型和引用类型,以及两者之间的一些区别.同时,还会介绍一下装箱和拆箱操作. 值类型和引用类型 首先,我们看看在C#中哪些类型是值类型,哪些类型是引用类型. 值类型: 基础数据类型(string类型除外):包括整型.浮点型.十进制型.布尔型. 整型(sbyte.byte.char.short.ushort.int.uint.long.ulong ) 浮点型(float 和 double ) 十进制型(decimal ) 布尔型(bool ) 结构类型(struct) 枚

.Net中值类型和引用类型的区别

解析:CLR支持两种类型:值类型和引用类型.用Jeffrey Richter(<CLR via C#>作者)的话来说,"不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能问题".这就要求我们正确理解和使用值类型和引用类型. 值类型包括C#的基本类型(用关键字int.char.float等来声明),结构(用struct关键字声明的类型),枚举(用enum关键字声明的类型):而引用类型包括类(用class关键字声明的类型)和委托(用delegate关键字声明的