网站首页 > java教程 正文
Java数据类型中,分为基本数据类型和引用数据类型
常见的引用数据类型就是类和数组了。
eg:
class HaC {
String name;
public static void main(String[] args) {
int age = 25;
String[] interests = {"打代码"};
int[] scores ={100};
HaC haC = new HaC();
haC.name = "HaC";
System.out.println("我的名字:" + haC.name + ",年龄:" + age +
",我的兴趣之一:" + interests[0] + ",分数:" + scores[0]);
changeName(haC);
changeAge(age);
changeInterests(interests);
changeScores(scores);
System.out.println("-----修改后------");
System.out.println("我的名字:" + haC.name + ",年龄:" + age +
",我的兴趣之一:" + interests[0] + ",分数:" + scores[0]);
}
static void changeName(HaC haC) {
haC.name = "哈C";
}
static void changeAge(int age) {
age = 18;
}
static void changeInterests(String interests[]) {
interests[0] = "开车";
}
static void changeScores(int scores[]) {
int[] newScores ={60};
scores = newScores;
}
}
输出:
我的名字:HaC,年龄:25,我的兴趣之一:打代码,分数:100
-----修改后------
我的名字:哈C,年龄:25,我的兴趣之一:开车,分数:100
可以看到有两处修改成功了:
haC.name = "哈C";
interests[0] = "开车";
而 age、scores[] 没有修改成功。
图解:
1、 changeName 、changeInterests 的原理是一样的
1)第一步
HaC haC = new HaC();
haC.name = "HaC";
haC 是一个引用地址0x9527 ,指向 new HaC() 对象
2)第二步
调用方法
changeName(haC);
static void changeName(HaC haC) {
}
HaC haC = new HaC(); 和 changeName(HaC haC)参数里面的两个haC 地址都是一样的,指向同一个对象。
3)第三步
修改
haC.name = "哈C";
所以这个修改是通过地址去修改了值。
2、changeAge、changeScores 原理差不多
changeAge的过程:
int age = 25;
changeAge(age);
把age的值copy 了一份给changeAge方法
修改了进行修改(但是这个修改是修改副本的值)
age = 18;
changeScores 的过程:
1)第一步
初始化
int[] scores ={100};
scores指向一个地址0x1314
2、第二步
调用方法
changeScores(scores);
static void changeScores(int scores[]) {
}
把scores的地址传递给副本(方法),两个同样指向地址0x1314
3、第三步
changeScores方法重新把一个新值(地址)赋予给scores
int[] newScores ={60};
scores = newScores;
此时两个地址是不一样的,但是方法里面的局部变量scores 和 全局变量 scores 所指向的是不一样的,你是你,我是我。
在Java中,大家都觉得参数的传递分为 值传递 和 引用传递
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。
但是Java中方法参数传递方式是按值传递,也只有值传递(地址也是值啊!)
猜你喜欢
- 2025-06-13 这款可视化的对象存储服务真香!Github标星28K+
- 2025-06-13 java对象序列化机制(java对象序列化的作用)
- 2025-06-13 「设计模式」原型模式:如何快速的克隆出一个对象?
- 2025-06-13 Java原型模式详解:从克隆技术到实战应用
- 2025-06-13 Java反射的奇妙应用(java反射的奇妙应用是什么)
- 2025-06-13 《Java培训:解锁面向对象思想的核心密码》
- 2025-06-13 Python学不会来打我(5)深拷贝和浅拷贝详解
- 2025-06-13 Java对象序列化与反序列化的那些事
- 2025-06-13 性能瓶颈诊断:如何揪出 Dubbo 大对象传输这个“幕后黑手”?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)