java值传递和引用传递简单_Java里的值传递与“引用传递”——一些想法
这两天在看Java的时候看到了方法中的值传递与引用传递,对于值传递我们都可以理解,非常的简单,但是对于引用传递,对于我们学过c++的人来说,那可不就来劲了吗,直接写一个函数来用“&”操作符直接改变参数的值——多么方便啊!!
BUT!!
Java没有引用传递,只有值传递
实参:实际参数,是提前准备好并赋值完成的变量。分配到栈上。如果是基本类型直接分配到栈上,如果是引用类型,栈上分配引用空间存储指向堆上分配的对象本身的指针。
形参:形式参数,方法调用时在栈上分配的实参的拷贝。
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,形参接收的是原始值的一个拷贝,此时内存中存在两个相等的变量
引用传递:方法调用时将实参的地址传递给对应的形参,实参和形参指向相同的内容
那么我们如何改变想要改变的数据呢?
Java中有两种大的数据类型:
1、基本数据类型:包括数值类型(整数,浮点数),字符类型(char),逻辑类型(boolean)
2、引用数据类型:包括类,接口,数组
我们对于基本数据类型进行操作的话只能改变形参的值,并不能改变实参,而如果我们对于引用数据类型进行操作,则可以改变我们想要改变的数据(由于对地址直接进行了操作)
在Java里我们并不能像c++一样放荡不羁,如此简单的操作内存,对于Java来说,简便是要素,那么让人头疼的引用自然需要用其他的方法来代替——
下面我来说两种最近看到的方法来对于我们想要让它本身改变的方法:
一、使用数组进行操作。
我们知道在c++中,数组是与指针其实是一样的,在Java中似乎保留了这样的特性,所以我们可以直接对于数组进行操作,从而将变化体现在实际上面。
代码如下:
public classhelloworld {public static voidmain(String[] args) {int[] arr = {1,2,3,4,5};for(int i=0 ; i<5 ; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
change(arr);for(int i=0 ; i<5 ; i++) {
System.out.print(arr[i]+" ");
}
}public static void change(intarr[]) {for(int i=0; i<5; i++) {if(arr[i]%2 == 0) {
arr[i]*=2;
}
}
}
}
(原谅博主懒,同一个项目反反复复用了好多遍。。。。。哭辽orz)
当然还有我们无法使用数组的时候:
这时候还有一个比较麻烦的方式——创建对象。。。
二、使用对象进行操作。
由于对象是引用数据类型,我们可以直接改变数据的值,代码如下:
classnumber{private inta;private intb;public number(int num1,intnum2) {this.a=num1;this.b=num2;
}public voidShowNumber() {
System.out.println("a = "+a+" b = "+b);
}public voidSwap() {int temp = this.a;this.a = this.b;this.b =temp;
}
}public classhelloworld {public static voidmain(String[] args) {
System.out.println("Input two numbers:");
Scanner sc1= newScanner(System.in);
Scanner sc2= newScanner(System.in);
number num= newnumber(sc1.nextInt(),sc2.nextInt());
num.ShowNumber();
num.Swap();
num.ShowNumber();
sc1.close();
sc2.close();
}
}
这就是两种方法啦
在以后或许还会有新的方法加入叭~
到时候也会继续更新的呢~
java值传递和引用传递简单_Java里的值传递与“引用传递”——一些想法相关推荐
- java 父类引用子类对象_java多态,如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 C ...
- java 引用被回收_java GC 静态List 如果没有引用会被回收吗
垃圾收算法 1.引用计数法(Reference Counting Collector) 2.tracing算法(Tracing Collector) 3.compacting算法(Compacting ...
- Java中的数组怎么弄随机数_Java – 如何从值数组中创建随机数
第一种方式: – 您还可以维护所有数字的列表.然后使用Collections.shuffle对列表进行洗牌并获取第一个元素.并删除它. List list = new ArrayList(); lis ...
- java中显示动态信息的方法_java里的动态表单技术
最近的一个项目,由于客户的需求等信息不确定,为了降低以后修改的成本及产品的推广考虑到动态表单技术,之前也一直在考虑到动态表单技术,毕竟在delphi里已经实现过了,由于我们采用的hibernate的执 ...
- java中的迭代是什么意思_JAVA里的 迭代 具体是指什么意思
JAVA里的 迭代 具体是指什么意思 (2009-10-15 14:30:21) 标签: it 迭代器模式(Iterator pattern) 一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌 ...
- Java 接收返回json数据动态取data里的值
json数据 data: {} {"code":200,"data":{"accountNonExpired":true,"acc ...
- 直接写出php二维数组一个值,直接取PHP二维数组里面的值
具体是这样的,如下一个二维数组,是从库中读取出来的. $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'email' =& ...
- jmeter获得Response Headers,Response Body里的值
一 提取Response Body里的值 提取 使用 二 提取Response Headers里的值 提取 使用
- java是值传递还是引用传递_Java 到底是值传递还是引用传递?
点赞.收藏还挺多,求一波关注 ------------------------------------------------------------ 没人邀请,自己强行回答一波. 关于这个问题,引发 ...
最新文章
- 使用MATLAB如何生成jar包
- 算法----- 给定一颗二叉树,找到二叉树上任意两个节点之间的距离(Java版本)
- android launchmode singleinstance问题
- mysql delete返回值_Mybatis执行sql(insert、update、delete)返回值问题
- C#设置系统日期时间格式
- Weblogic11g安装部署-winserver篇
- 你了解SVN, CVS等版本控制器吗?
- [导入]液晶显示器型号速查[转]
- 2021年电工(技师)考试题库及电工(技师)考试报名
- msf-Msfvenonm生成后门木马
- EXCEL【数据处理之数据抽取——随机抽样】
- jsonp跨域请求原理
- 如何判断DNS解析故障?如何解决DNS解析错误?
- Retina 显示屏
- 游戏公司用IM软件 “颜值”和“手感”一个都不能少
- BubbleGum96 开箱杂谈与软件资源
- axios请求跨域前端解决_10、axios请求以及跨域问题,前端解决方法。11、后端-nginx解决方法...
- RL策略梯度方法之(十八): Importance Weighted Actor-Learner Architecture (IMPALA)
- python调用报表制作工具_Python如何使用xlwt制作一个表格
- 软件工程专业计算机毕设选题推荐
热门文章
- aopaspect区别_spring 中的aop:advisor和aop:aspect有什么区别?
- UI设计配色专辑素材|简易完成色彩协调性!
- 让UI设计显得魅力非凡,设计师少不了的渐变背景素材专辑,
- 导入数据_导入外部数据的三个技巧
- Ubuntu系统下实时监控GPU的温度
- Linux网络协议栈:NAPI机制与处理流程分析(图解)
- 直接内存访问 (Direct Memory Access, DMA)
- arcgis导出shp文件_RegionManager GIS导出shp文件编码说明
- java 文曲星猜数字,「3D跨度表」文曲星中的猜数字游戏,要猜一个四位数,有什么通用公式?...
- win10 中午未使用 内存占用增高_清理磁盘空间【win10篇】