引用传递和值传递

news/2024/7/19 8:43:52 标签: 爬虫

(1)基本数据类型传值,对形参的修改不会影响实参;
(2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;

 

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

 

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

 

 

  所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
  所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
值传递,例如:
class TestT1 { 
         public static void main(String[] args) { 
                   int i = 5; 
                   int j = 6; 
                   System.out.println("before exchange i = "+i);//交换前
                   exchange(i, j); 
                   System.out.println("after exchange i = "+i);//交换后
         }
public static void exchange(int a,int b) { 
         int k;
         k = a;a = b; b = k; 
         } 

程序的结果是5.
         这说明,原始数据类型是按值传递的,这个按值传递也是指的是进行赋值时的行为。 
         Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,但这只是在Java语言中没有明确的指针定义,实质上每一个new语句返回的都是一个指针的引用。引用传递,例如:
class TestT2{ 
         public static void main(String[] args) { 
                   String s= new String("good"); 
                   String s2=s; 
                   s2.append(" afternoon."); 
                   System.out.println(s); 
         } 

         对象s和s2指向的是内存中的同一个地址因此指向的是同一个对象。 
这里的意思是进行对象赋值操作是传递的是对象的引用,因此对象是按引用传递的。 
程序运行的输出是: 
         good afternoon. 
这说明s2和s是同一个对象。
总结: 
       大家都知道,在JAVA中变量有以下两种:
         基本类型变量,包括boolean、byte、char、short、int、long、float、double。
         引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。
         对于基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。
         而对象作为参数,如果在方法中把对象作为参数,方法调用时,参数传递的是对象的引用,即在方法调用时,实际参数把对对象的引用传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象,方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。

 

转载于:https://www.cnblogs.com/dldrjyy13102/p/7543093.html


http://www.niftyadmin.cn/n/914176.html

相关文章

动态Validator的奇怪问题

最近在用asp.net的验证控件,显示方式是display"Dynamic" ,并且是即时提示的比如一个用户名TextBox1,如果我在TextBox1中输入不合法的文字,然后鼠标立刻很快的移到下一个输入框,这时候那个验证控件的红色警告文子就出现了&#xff0…

mpvue scroll-view自动回弹bug解决方案

表现 设置了scroll-top的scroll-view组件,在组件所在vue实例data发生改变时会自动回弹到最上方 解决方案 打开 node_modules/mpvue/index.js, 在任意位置添加以下两个方法 function calcDiff(holder, key, newObj, oldObj) {if (newObj oldObj || newObj unde…

解决springboot 新版本 2.1.6 spring-boot-starter-actuator 访问报404

pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

ORACLE问题与解答

ORACLE问题与解答 大家在应用ORACLE的时候可能会遇到很多看起来不难的问题, 特别对新手来说, 今天我简单把它总结一下, 发布给大家, 希望对大家有帮助! 和大家一起探讨, 共同进步! 对ORACLE高手来说是不用看的. 1. Oracle安装完成后的初始口令?   internal/oracle   sys/…

mpvue小程序中怎么引入iconfont字体图标?

前言 iconfont阿里巴巴矢量图标库是我很喜欢的一个网站&#xff0c;可以下载/在线编辑/上传自己需要的矢量图标&#xff0c;也支持团队协作&#xff0c;那么在mpvue项目中如何引入呢&#xff1f; iconfont阿里巴巴矢量图标库 将图标加入购物车 搜索关键词可以是中文也可以是…

Project Euler Problem 5-Smallest multiple

对每个数字分解素因子&#xff0c;最后对每个素因子去其最大的指数&#xff0c;然后把不同素因子的最大指数次幂相乘&#xff0c;得到的就是最小公倍数 python不熟练&#xff0c;代码比较挫 mp {}def process(n):i 2while i*i < n:cnt 0if n%i 0:while n%i 0:cnt 1n /…

自定义Chrome的console(样式、打印图片、开关)

目录&#xff1a; 常用console类型自定义console样式打印图片关闭生产环境的console 常用console类型 console.log() 常规打印 console.warn() 打印警告信息 console.error() 打印错误信息 console.time() 和 console.timeEnd() 打印两次函数的时间间隔&#xff0c;…

解决spring cloud config导致class path resource [logback-spring.xml] cannot be resolved to URL

spring cloud 项目启用配置服务后&#xff0c;找不到logback-spring.xml配置文件 2019-08-22 13:54:58.056 INFO 28559 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888 2019-08-22 13:55:00.917…