欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 引用类型的数据传递的是内存地址实例

程序员文章站 2022-03-12 10:53:06
目录java 引用类型的数据传递的是内存地址看下面的代码和截图list集合存引用数据类型时的问题集合list的存储元素java 引用类型的数据传递的是内存地址java中引用类型的数据,传递的是内存地址...

java 引用类型的数据传递的是内存地址

java中引用类型的数据,传递的是内存地址,像类,数组,接口,string等等都是引用类型!

看下面的代码和截图

public class test2 {
	// java中引用类型的数据传递的是内存地址
	private map<string, student> students = new hashtable<string, student>(); 
	public void mytest() {
		student student1 = new student("令狐冲", 16, "华山派", 19888.66);
		student student2 = new student("韦小宝", 15, "紫禁城", 99999.99);
		student student3 = new student("张无忌", 18, "光明顶", 18888.88);
		students.put("1", student1);
		students.put("2", student2);
		students.put("3", student3);
		iterator<map.entry<string, student>> entries = students.entryset().iterator();
		while (entries.hasnext()) {
			map.entry<string, student> entry = entries.next();
			system.out.println("key = " + entry.getkey() + ", value = " + entry.getvalue());
			entry.getvalue().setage(entry.getvalue().getage() + 1);
		} 
	}
	
	public void mytest2(){
		list<string[]> citys = new arraylist<string[]>();
		string [] citynames = {"赣州市", "于都县", "江西省", "中国", "赣南地区"};
		citys.add(citynames);
		for (int index = 0; index < citys.size(); index++) {
			string[] mycitynames = citys.get(index);
			for (int i = 0; i < mycitynames.length; i++) {
				system.out.println(mycitynames[i]);	
				if (i == 1) {
					//修改mycitynames数组 (java中引用类型的数据传递的是内存地址)
					mycitynames[i] = "我们" + mycitynames[i];
				}
			}
			
			system.out.println("--------------------------------");			
			for (int i = 0; i < mycitynames.length; i++) {
				system.out.println(mycitynames[i]);	
			}			
		}
		system.out.println("--------------------------------");
		//修改citynames数组 (java中引用类型的数据传递的是内存地址)
		citynames[0] = "我们赣州市";
		
		for (int index = 0; index < citys.size(); index++) {
			string[] mycitynames = citys.get(index);
			for (int i = 0; i < mycitynames.length; i++) {
				system.out.println(mycitynames[i]);	
			}
		}
	}
 
	public static void main(string[] args) {
		test2 test2 = new test2();
		test2.mytest();
		system.out.println("--------------------------------");
		iterator<map.entry<string, student>> entries = test2.students.entryset().iterator();
		while (entries.hasnext()) {
			map.entry<string, student> entry = entries.next();
			system.out.println("key = " + entry.getkey() + ", value = " + entry.getvalue());
		}
		test2.mytest2();
	} 
}

java 引用类型的数据传递的是内存地址实例

list集合存引用数据类型时的问题

集合list的存储元素

(1)如果list中存的是基本数据类型,则存的是值

(2)如果list中存的是引用数据类型(如对象等),则存的是引用

如果对象的引用地址没变,内容变化,也会引起调用该对象时内容变化

下面举一个在集合list中存放对象的例子:

  //构建原始数据
        arraylist<goods> list = new arraylist();
        goods goods1=new goods("plum ", 2);
        list.add(goods1);
        list.add(new goods("apple", 1));
        list.add(new goods("banana", 2));
 
        //打印原始数据
        system.out.println("原始数据:");
        for(goods goods : list){
            system.out.println(goods);
        }
        goods1.setgoodsid(444);//改变goods1的内容
        system.out.println("原始数据1:");
        for(goods goods : list){
            system.out.println(goods);
        }

结果:

原始数据:
goods{goodsname='plum ', goodsid=2}
goods{goodsname='apple', goodsid=1}
goods{goodsname='banana', goodsid=2}
原始数据1:
goods{goodsname='plum ', goodsid=444}
goods{goodsname='apple', goodsid=1}
goods{goodsname='banana', goodsid=2}

结果表明:由于list中存储对象的引用所指的内容发生了变化,所以导致了list中元素内容的改变

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。