java 引用类型的数据传递的是内存地址实例
作者:慕容囧囧 发布时间:2023-11-29 15:13:53
标签: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();
}
}
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中元素内容的改变
来源:https://blog.csdn.net/czh500/article/details/79691569
0
投稿
猜你喜欢
- 这篇文章主要介绍了Spring整合MyBatis图示过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 工作笔记(在不知道json的key时如何获取当前json的keys)String json="{'name':
- 前言我们在日常开发中,经常会用到一个系统需要链接多个数据库来实现业务的需求,比如多个系统之间数据调用、两个数据之间同步等等。今天给大家分享使
- 前言该篇介绍的内容如题,就是利用redis实现接口的限流( 某时间范围内 最大的访问次数 ) 。正文 惯例,
- 简介官方API文档Scaffold的of方法说明有说明调用Scaffold.of方法是在Scallfold的子组件的Build方法中,也就是
- 定义:/** * @author Administrator * @project: TestOne * @package: PACKAGE
- 新建一个集合List<Bill> billList = new ArrayList<>();将订单中所有物品的名称提
- 1.微信配置信息 global.properties2.方法wxpay用于生成预支付订单信息方法notifyWeiXinPay用于微信支付成
- 一、demo简介1.效果展示如下图,我截了三个瞬间,但其实这是一个连续的动画,就是这个大圆不停地吞下小圆。2.这个动画可以拆分为两部分,首先
- 1、找准入口,使用ClassPathXmlApplicationContext的构造方法加载配置文件,用于加载classPath下的配置文件
- 一、前言对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外。二、MyBatis的初始化做了什么2.1 Mybatis的
- 这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 各位亲们可以尝试以下代码:注:这里我就只有一个html标签对来说明问题了,首部之类的东西,自己添加。<html> &n
- 前言在项目中,如果我们要遵循分层领域模型规约: 话,肯定避免不了在DTO、VO、BO、AO、VO、Query等实体的转换,我们通常有几种做法
- Mybatis-Spring当我们使用mybatis和spring整合后为什么下面的代码可以运行?一个问题:我就写了个mapper接口为什么
- 一、一级缓存二级缓存的概念解释(1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓
- 相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车;就像我们平时去超市买
- 介绍本文介绍在Java程序中如何添加图片到excel表格,添加图片时可设置图片大小、位置、旋转、超链接、可选文本等,以及如何读取、删除exc
- 概述对List进行分组是日常开发中,经常遇到的,在JDK 8中对List按照某个属性分组的代码,超级简单。package test;impo
- 一:什么是SparkSQL?(一)SparkSQL简介Spark SQL是Spark的一个模块,用于处理结构化的数据,它提供了一个数据抽象D