博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 在方法中是传值还是传地址
阅读量:3950 次
发布时间:2019-05-24

本文共 2311 字,大约阅读时间需要 7 分钟。

Java 在方法中是传值还是传地址

Test 1

package com.day10;//问题:在方法中是传值还是传地址//1.如果是基本数据类型,则是 传值//2.如果是引用数据类型,则是 传地址public class ConveyValue2 {
public static void main(String[] args) {
/*如果是基本数据类型,则是 传值*/ int num = 10; /**在此处调用方法 value() ,只是将上一行代码 int num = 10 赋值到的 num(值为 10) , * 作为参数传给 value 方法中,但 value 方法的返回值仅仅是限制在了 value(num) 及其之内, * 因此 main 方法中 num 的值依然还是 10; * 而 value 方法中 num 的值为20*/ value(num); System.out.print(num); //输出 10 System.out.print(value(num)); //输出 20 ConveyValue2 con = new ConveyValue2(); con.valueTh(numTh); System.out.print(numTh); //输出 15 /*如果是引用数据类型,则是 传地址*/ int[] arrNum = new int[] {
10,20,30,40,50}; /**在此处调用方法 arrValue() ,并将引用类型的值作为参数传递给 arrValue() 方法, * 由于,引用类型的值即是地址, * 从而,此时的 array[0] 即是 arrNum 指向的在堆中的数组的第一个值*/ arrValue(arrNum); for(int i:arrNum) System.out.print(i+" "); //输出 60 20 30 40 50 } /*如果需要将基本数据类型通过调用方法的形式,改变值,需要使用 this * 并且由于 this 不能用于静态方法中,以及不能调用局部变量, * 因此需要将 numTh 设置为成员变量,this 才能够调用*/ static int numTh = 15; //被上面 main() 方法中的 con.valueTh(numTh); 所调用 public static int value( int num) {
num = 20; return num; } public static void arrValue(int[] array) {
array[0] = 60; } public int valueTh(int num) {
this.numTh = num; return numTh; }}

Test 2

//1.如果是 /*基本数据类型*/ 则是 传值//2.如果是 /*引用数据类型*/ 则是 传地址public class ConveyValue {
private static int nm = 5; private static int num = 8; public static void main(String[] args) {
/* 如果是基本数据类型,则是 传值 */ int num = 10; int addNum1 = addNum1(num); //输出:15 int addNum2 = addNum2(num); //输出:20 System.out.println(addNum1); System.out.println(addNum2); /* 如果是引用数据类型,则是 传地址 */ /**在此处调用方法 arrNum() ,并将引用类型的地址 作为参数传递给 arrNum() 方法, * 由于,引用类型的值即是地址, * 从而,此时的 arrNum[0] 即是 arrs 指向的在堆中的数组的第一个值*/ int[] arrs = new int[3]; int[] arrNum = arrNum(arrs); for (int i : arrNum) {
System.out.print(i+","); //输出:60,0,0, } } private static int addNum2(int num) {
num += num; //就近原则,两个num都是传进来的实参 10,并非定义的静态成员变量 8 return num; } public static int addNum1(int num) {
// this.nm += num; //报错,this 不能用于静态方法:Cannot use this in a static context nm += num; return nm; } public static int[] arrNum(int[] arrs) {
arrs[0] = 60; return arrs; }}

总结

问题:Java在方法中是传值还是传地址

  • 第一种说法:
  1. 如果数据类型是基本数据类型,则传递的是 值
  2. 如果数据类型是引用数据类型,则传递的是 地址
  • 第二种说法:

在 Java 中,只有传值,没有传地址,因为引用类型的值就是地址值


转载地址:http://trhwi.baihongyu.com/

你可能感兴趣的文章
开始使用Retrofit 2 HTTP 客户端
查看>>
对于初学者练习的6个开源项目
查看>>
保持冷静和需要打破的东西:软件测试初学者
查看>>
如何通过连接您的业务应用程序来节省时间
查看>>
熟悉现代JavaScript的培训计划
查看>>
7本书从小工到数据分析专家
查看>>
程序设计的基本原则:栈和堆
查看>>
Android应用程序架构
查看>>
Android:绘制自定义视图
查看>>
Android开发:一些有用的库(第一部分)
查看>>
Android 默认暗码
查看>>
Android 系列 1.3了解Android版本
查看>>
Android 系列 6.28使用正确的复数格式化
查看>>
Android 系列 6.29创建在两个活动之间显示的加载屏幕
查看>>
Android的Gradle技巧 1.2配置SDK版本和其他默认值
查看>>
Android的Gradle技巧 1.3从命令行执行Gradle构建
查看>>
Android的Gradle技巧 1.4从Android Studio执行Gradle构建
查看>>
Android的Gradle技巧 1.5添加Java库依赖关系
查看>>
Android的Gradle技巧 1.6使用Android Studio添加库依赖关系
查看>>
Android的Gradle技巧 1.7配置存储库
查看>>