方法参数与字段

刚刚遇到一个很有趣的问题

class Program
    {
       static int x = 5;
       static void fun(int x)
        {
            x =3;
        }
        static void Main(string[] args)
        {
            fun(7);
            Console.WriteLine("x:{0}",x);
            Console.ReadLine();
        }
    }

以上的输出的x是哪个数字?我一度肯定的以为是3,因为值类型是直接把对象保存在内存中的,如果是这样的话,x的变化过程就是5->7->3,但是秉承实践出真知的理念,我写了以上的代码运行了一下,结果很让我奔溃,输出的结果是5,这是为什么?后来发现,这两个X根本不是同一个,被误导了,看图:

,看到了吗,一个是字段,一个是方法的参数,也就是说,两个x不是同一个,内存地址不一样,所以不论fun中的想怎么变化,字段x根本就不会变。

时间: 2024-10-13 15:59:13

方法参数与字段的相关文章

java如何获取方法参数名

在java中,可以通过反射获取到类.字段.方法签名等相关的信息,像方法名.返回值类型.参数类型.泛型类型参数等,但是不能够获取方法的参数名.在实际开发场景中,有时需要根据方法的参数名做一些操作,比如像spring-mvc中,@RequestParam.@PathVariable注解,如果不指定相应的value属性,默认就是使用方法的参数名做为HTTP请求的参数名,它是怎么做到的呢? 在这样情况下,有两种方法获取方法来解决这种需求,第一种方法是使用注解,在注解中指定对应应的参数名称,在需要使用参数

关于laravel5.5控制器方法参数依赖注入原理深度解析及问题修复

在laravel5.5中,可以根据控制器方法的参数类型,自动注入一个实例化对象,极大提升了编程的效率,但是相比较与Java的SpringMVC框架,功能还是有所欠缺,使用起来还是不太方便,主要体现在方法参数的注入不完全是按照参数名称进行的,如果改变了传入参数的顺序会导致类型不匹配的错误. 一.控制器方法参数注入步骤设计 1.在/routes/web.php中添加路由 Route::get('/diary/show/{diary}/{page?}','Diary\[email protected]

JQuery中$.ajax()方法参数详解

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

 一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响. 当方法传递的参数是引用类型是,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置.所以,在目标方法中对形参所做的更改会影响调用者的初始变量. 二.一些特殊的方法参数 1.引用参数---ref (使值类型的变量做方法参数时也可以传引用) 一些数据类型(

C#中方法参数的类型

C#方法参数类型有三种: 根据传递方式不同分为值传递和引用传递 值传递的本质是在传递参数时是把实参里面存的值传递给方法的形参,方法中对形参改变数值不会影响原来实参里面的数据. 输出结果为0 引用类型传递的本质是:实参是引用类型存储的是地址值,传递时是将实参中的地址传递给形参,这个时候形参中存储的是地址值.而在方法中改变变量值的时候是引用地址中存储的数据,所以会改变原来实参变量的值.因为两个变量引用的是一个地址. 声明引用类型传递时,需在方法签名中使用ref关键字声明参数类型为引用传递,并且在调用

ajax方法参数

jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持. 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设置. 4.async: 要求为Boolean类型的参数,默

springmvc 方法参数自定义的解析

1.实现HandlerMethodArgumentResolver接口: 2.在配置文件中添加配置<mvc:argument-resolvers>   <bean class=""></bean>  </mvc:argument-resolvers> class文件是第一步中定义的class 3.定义注解用于只解析controller带有该注解的方法参数 自定义方法参数解析实现了前端和后端的数据的统一,比如将表单数据定义成bean,通过定

java 方法参数-值调用,引用调用问题

(博客内容来自于core java卷一) 1. xx调用:程序设计语言中方法参数的传递方式: 引用调用(call by reference):表示方法接收的是调用者提供的变量地址. 值调用(call by value):表示方法接收的是调用者提供的值. 命名调用(call by name):已经成为历史. 2. Java使用值调用,而且只有值调用.也就是说方法得到的是参数值的一个拷贝,并不是参数值本身,所以,方法不能修改传递给它的的任何参数变量本身. 看下面代码: public class te

jQuery中$.ajax()方法参数解析

本文实例为大家讲解了jQuery $.ajax()方法参数,供大家参考,具体内容如下 $.ajax({ url:'test.do', data:{id:123,name:'xiaoming'}, type:'post', dataType:'json', success:function(data){ alert(data);//弹窗 //TODO ........ }, error:function(data){ alert(data);//弹窗 //TODO ........ } }) ur