关于java引用型变量赋值
2014-09-28 14:34
260 查看
一般来说在java中赋值还是比较安全的(相对于C C++来说),
在java中将 一个对象作为参数传入一个函数中,然后给形参赋值 一般来说能成功
因为形参和实参指向的堆内存中的同一地址
刚才在集合赋值的时候出现问题 ,
输出结果发现: list的值没有发生任何变化
自己想下什么原因吧
栈变量 temp 先指向list 的某个节点
然后 又使 temp 指向 ai
这两个过程对 list 没有任何改变 就是简简单单的temp改变了一次引用的地址而已
对于引用型变量赋值 注意了 改变的只是其引用的地址
下面再看引用型变量内部非引用型数据 简单的传递引用赋值后,两个引用形变量指向同一段内存空间 所以改变list2 的值 list1的值同样改变了
在java中将 一个对象作为参数传入一个函数中,然后给形参赋值 一般来说能成功
因为形参和实参指向的堆内存中的同一地址
刚才在集合赋值的时候出现问题 ,
List list=new arrayList<AccountInfo>(); AccountInfo ai=new AccountInfo(); for(AccountInfo temp : list) { temp=ai; }这段代码原意是将list的每一个子项都赋值成ai。
输出结果发现: list的值没有发生任何变化
自己想下什么原因吧
栈变量 temp 先指向list 的某个节点
然后 又使 temp 指向 ai
这两个过程对 list 没有任何改变 就是简简单单的temp改变了一次引用的地址而已
对于引用型变量赋值 注意了 改变的只是其引用的地址
下面再看引用型变量内部非引用型数据 简单的传递引用赋值后,两个引用形变量指向同一段内存空间 所以改变list2 的值 list1的值同样改变了
package com.aaa.socketTest; import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args){ //初始化list1 List<ClassA> list1=new ArrayList<ClassA>(); ClassA a=new ClassA(1, "aaa"); list1.add(a); ClassA b=new ClassA(2, "bbb"); list1.add(b); ClassA c=new ClassA(3, "ccc"); list1.add(c); //将list1赋值给list2 List<ClassA> list2=new ArrayList<ClassA>(); for(int i=0;i<list1.size();i++) { list2.add(list1.get(i)); } //改变list2的值 list2.get(0).j="ddd"; list2.get(1).j="eee"; list2.get(2).j="fff"; //输出list1 的值 for(int i=0;i<list1.size();i++) { System.out.println(list1.get(i).i+" : "+list1.get(i).j); } } /*结果 1 : ddd 2 : eee 3 : fff */ } class ClassA{ public int i; public String j; public ClassA(int i,String j){ this.i=i; this.j=j; } }
相关文章推荐
- 关于Java的构造器和直接为成员变量赋值的区别
- 关于java数组中某个元素用等号赋值给中间变量需要注意的问题。
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 关于java的环境变量小解
- 关于Java设置环境变量后的调试出现问题的解决方案
- 关于 JAVA初学者 环境变量设置的说明(转)
- java.sql.SQLException: ORA-01006: 赋值变量不存在
- 关于final变量的赋值问题
- Java中的变量赋值和参数传递
- 关于java变量的讨论(转)
- 关于Java环境变量的设置
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- java变量的赋值与传递
- Java中关于类变量和实例变量
- java变量的赋值与传递
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 关于全局变量赋值的问题
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 关于变量声明赋值