展开

关键词

java的参数(值和引用

,必须有其所在类或对象调用时才有意义,若有参数: 形参:声明时的参数; 实参:调用时实际给形参的参数值; java的实参如何呢? 基础数据类型参数式只有一种:值。 即将实际参数值的副本(复制品)内,而参数本身不受影响; public class Test{ public static void test(int i) { 总之,基本数据类型在参数的过程中,先将实参的值赋值到形参上,然后再在栈中开辟一个内存,将该值赋给新的变量。 引用数据类型参数,原来的实例化的对象和新建立的实例化对象都指向同一个对象,因此引用对象值的改变会影响到new出来的对象。

23240

Java参真的有引用吗?

很多介绍Java的文章都会说,Java有两种式:值和引用。 真的有两种式吗? 我们先来看下基本类型和引用类型在内存中是如何存储的。 (图片来源:王争《Java编程之美》https://www.xzgedu.com/detail/p_625cfab5e4b01a4851f30d8a/6) 参 如果的参数是基本类型,那么调用的时候 所以,在Java语言中参,不管是基本类型还是引用类型都是按值的,都是变量中的值。 那C++为什么有引用呢? 随便从网上找了一幅图说明一下: C++的引用的是变量自己的地址:0x7fff5cc109de Java的是变量里的值:10 (如果是引用类型的变量,那么变量里的值就是对象的首地址,不管怎么样 ,的都是变量里的值) 所以说Java没有引用,只有值

4920
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java-值、地址

    TestParameterTransfer@15db9742 李太白 TestParameterTransfer@15db9742 李寻欢 TestParameterTransfer@15db9742 李寻欢 出现的疑问:Java 中明确指出,中的所有参数都是值,但是为何会有类似于了地址的情况呢? 解答:因为 首先在类里构造的(一般)本身是定义输入值为用类定义的对象 而调用的时候我们也根据输出结果进一步验证了对象名所对应的是一个由 TestParameterTransfer类定义的指针 形参

    29710

    中参数

    1.值参数: 这种式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。 在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。 2.引用参数 这种式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。 引用参数表示与提供给的实际参数具有相同的内存位置

    23620

    面试题57(Java参数特性)

    changeStr(str); System.out.println(str); } } A 1234 B welcome C 空 D 不确定 考点:考察求职者对Java 参数特性的理解 出现频率:★★★★★ 【面试题分析】 此处应该考察Java参数特性。 Java调用中,只存在值调用。 此处,实参str是引用变量,由于java调用是值,所以形参str得到的是实参str的一个拷贝。此时形参str和实参str均指向字符串"1234"。 然后,在changeStr中,形参str指向了一个新的字符串"welcom",而后结束,形参str被销毁。而实参str仍然指向字符串"1234"。 所以参考答案是 (A)

    44650

    Java与引用

    Java面试题: 当一个对象被当作参数到一个后,此可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值还是引用?   ---- 值调用时,实际参数把它的值给对应的形式参数,中执行形式参数值的改变不影响实际参数的值。 引用:也称为地址。 调用时,实际参数的引用(即地址,而不是参数的值)被中相对应的形式参数, 在中执行对形式参数的操作实际上就是对实际参数的操作(地址操作),这样执行中形式参数值的改变将会影响实际参数的值 中的值和引用 Java 是值还是引用 java参数时到底是值还是引用 Java 的==和Equals比较

    25131

    java — 值和引用

    Java 应用程序中永远不会对象,而只对象引用。因此是按引用对象。Java 应用程序按引用对象这一事实并不意味着 Java 应用程序按引用参数。 参数可以是对象引用,而 Java 应用程序是按值对象引用的。   Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数给一个时,处理这两种类型的式是相同的。 两种类型都是按值的;没有一种按引用。  java实际上只有值,没有真正意义上的引用。 按值意味着当将一个参数给一个函数时,函数接收的是原始值的一个副本。 ,这个按值也是指的是进行赋值时的行为下一个问题:Java 应用程序有且仅有的一种参数机制,即按值Java 应用程序有且仅有的一种参数机制,即按值

    54090

    java——值和引用

    被调用时,实参通过形参把它的内容副本内部,此时形参接收到的内容是实参值的一个拷贝,因此在内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容。 因此这两个age和weight对应的内容不是同一个,在valueCross中修改的只是自己栈中的内容,并没有修改main栈中的内容 引用 ”引用”也就是指向真实内容的地址值,在调用时, 实参的地址通过调用被给相应的形参,在体内,形参和实参指向同一块内存地址,对形参的操作会影响的真实内容。 我们知道,java中的对象和数组是存放在堆内存中的,而堆内存是线程共享的,所以main执行时,会在堆内存中开辟一块内存,用来存储p对象的所有内容,然后再栈内存中创建一个引用p存储堆区中p对象的真实地址 这块内存,现在修改person的name值修改的是xo2222这块内存空间的值,不会改变xo3333的值,所以测试结果2中的name没有发生变化 引用本质上就是值,将引用变量的值给形参,因为引用变量的值存放的是地址值

    19020

    Java 引用和值

    (); 我调用一个 fun1 void fun1(ClassA classa) { // 这里面的ClassA 就是做的引用,他是个形参,那实际参数是什么呢?? 是的 // 这个就是引用 引用类型引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象; a = string i = 111 j = 11.12223 java只会作用在内部,不会影响外的数据。 System.out.println("\n下面我的值将会被改变"); // 执行过程中对值的变量进行修改,不会影响源数据 param = "我把值的内容改了 = 我是参数 下面我的值将会被改变 我已经把 param 内容修改掉了,修改成了 :我把值的内容改了 我是执行过的参数 param , 我现在的值是 = 我是参数 引用 public

    17310

    java Http消息之POST和GET两种

    /** * 通过Get来向服务器值和获取信息, * 这里举例假设的前提是,链接上服务器,服务器直接发送数据给本地 * * 大体的思路: * 1、首先通过URL地址来获得链接的借口 * 通过接口,来设置链接超时的时间,请求式,是否可以输入输出数据 * 得到读取服务器内容的读取流 * * 2、为存储 从服务器读取到的数据做准备 * 将读取到的数据写入文件或直接得到字符串 catch block 38 e.printStackTrace(); 39 } 40 41 } /** * * 通过Post向服务器发送数据和获取数据 POST"); 16 conn.setDoInput(true); 17 conn.setDoOutput(true); 18 //设置提交数据类型(HTML送数据必须的 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 20 //将要的数据转换为比特类型

    50230

    java学习——java按值和按址

    (十一) 先复制一个面试/笔试的题: 当一个对象被当作参数到一个后,此可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值还是引用? 答案: 是值Java语言的调用只支持参数的值。当一个对象实例作为一个参数被中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。 C++和C#中可以通过引用或输出参数来改变入的参数的值,但是在Java中却做不到。 java中的按值和按址(按引用),要明白这两个概念,要理解按值和按址。 如上例子,第一种可以认为是按值,第二种可以认为是按址(按引用)。知道了这个概念。在进行下面的简单分析。 按值:只有当参数为基本类型变量的时候,java按这种策略的。 按址:只有当参数为引用类型变量,java按这种策略式进行。 上面的Url地址给朋友,那么如果朋友也有修改的权限,朋友对照片进行操作,自己访问的照片就是朋友操作结果后的结果。

    8020

    java中值和引用

    一.java中的值的问题 指的是在调用时,的参数是按值的拷贝。 a:" a);}//运行输出//交换里面的a:1111//交换a后的值:1按值重要特点:的是值的拷贝,也就是说后就互不相关了。 二.java中的引用的问题 指的是在调用时,的参数是按引用进行,其实的引用的地址,也就是变量所对应的内存空间的地址。 :" p.getAge());}//运行输出//改变年龄里面的年龄:35//改变年龄后的年龄:25我们在里面重新改变person对象的指向,这时如果是引用,必然会导致p对象里面的age发生改变 在 Java 应用程序中,当对象引用是的一个参数时,您的是该引用的一个副本(可以认为特殊的值),而不是引用本身。

    20910

    Java 02 - 值与引用

    与引用 几个误区 Java是引用. 值类型是值, 引用类型是引用. 所有的都是值, 因为引用本质上只有个值, 本质上是指针. 我们根据求值时间和式, 对不同的求值策略进行分类: 求值策略 求值时间 式 值(pass by value) 调用前 值的结果(原值的副本) 引用(pass by reference : - 值 引用 根本区别 会创建副本 不创建副本 所以 函数中无改变原始对象 函数中可以改变原始对象 这里所说的改变, 是指把一个变量指向另一个对象, 而不是仅仅改变属性或者成员. 综上所述, 我们对Java的函数调用式可以描述为: 参数是通过值式, 的值是一个引用的拷贝. 几个解释 针对于上文的几个误区, 我们来一一进行解释: 引用是指的求值式, 而不是说Java的参数类型是对对象的引用. 并且Java在函数调用时, 是通过值式, 引用的副本.

    6310

    面试题系列第7篇:Java到底是值还是引用

    要点:Java到底是值还是引用? 这个问题一直在技术讨论区争论不休。对于初级人员来说很具有迷惑性,即便对于很多高级开发来说,也搞不清楚。 也就说在整个过程中change只是复制了a的值,在内对变量b的操作并没有影响到a原本的值。 对照上面的概念,很轻易发现这个过程中就是值。下面再来看看针对String对象的内存结构变化。 有朋友说:不对啊,我进来一个对象,然后调用其set也可以修改对象的内容啊! 那么,我们再来看看引用类型的内存结构图。 也就是说无论通过什么类型,最终都是进行了一份复制操作,而并不是直接实际值的引用。所以,在Java中本质上只有值,也就说Java参只会它的副本,并不会参数本身。 原文链接:《面试题系列第7篇:Java到底是值还是引用?》

    34110

    Java 参数是值还是引用

    首先把结论表明,Java 的参数是值,因为有部分细节让人引起误解以为是引用,故我们写两个例子来举例探讨。 System.out.print(b+"\n"); } } 控制台输出为 10 15 10 int 属于基本数据类型,我们都知道基本数据类型存储于栈,而它的地址就是值本身,这个例子中我们把 a 的值复制一份给 add 中,形参 b 被赋值 15,当 add 执行完最后一行代码,整个栈被回收。 是值最大的疑问就是为什么这个例子中的 Student 实例对象 a 到 change 中 age 、name 参数被改变了会影响到外面的对象,大家先看一下控制台的输出,当我们对形参 b = c 时,它的内存地址确实是改变了,但是并没有影响到外面的 a 对象的内存地址,这就充分说明了值,只不过值得一提的是,这个值是复制了一份对象,但是里面的参数所引用的地址指向是一样的,重点理解的是引用数据类型的确实是值

    43420

    Java的参数是值还是引用

    当一个对象被当作参数到一个后,在此内可以改变这个对象的属性,那么这里到底是值还是引用?    答:是按值Java 语言的参数只有按值。 当一个实例对象作为参数被中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的内改变,但对象的引用(不是引用的副本) 是永远不会改变的。 Java的参数,不管是基本数据类型还是引用类型的参数,都是按值,没有按引用!  我们可以看一下microsoft的文档中对按引用参数的定义(如下截图): ? num作为参数给changeNum()时,是将内存空间中num所指向的那个存储单元中存放的值1给了changeNum()中的x变量,而这个x变量也在内存空间中分配了一个存储单元,这个时候 当执行到第5行代码时,person作为参数给change(),需要注意的是:person将自己存储单元的内容给了change()的p变量!

    36840

    Java是值还是引用

    开篇名义,首先就把结论表明--->Java是值还是引用起决于的参数是基本数据类型(int,byte,long等)还是引用数据类型(String和类变量)。 废话不多说,上代码。 ? ? 代码很简单,图一中调用静态IntValues(int t),毫无疑问是值,因为如果是引用,那么二者打印的值是一致的。很明显,a--之后,t的值没有发生改变。 图二也是一样,清晰明了,把参数的值赋值给a,然后改变a的值,二者值打印均一致,那是因为t代表的是一个堆内存的地址,基本数据类型用=、+=、-=、等等符号代表把右边的值拷贝一份给左边,二者之间不会有联系 ,引用数据类型则大大不同,打个比,它们相当于了一把钥匙,大家都能打开同一扇门,即大家都是对同一个堆内存的数据进行操作,而第二次打印不同是因为a变量重新赋值的缘故,地址指向另一块堆内存。

    53510

    JAVA中的值和引用

    num作为参数给changeValue()时,是将内存空间中num所指向的那个存储单元中存放的值,即"5",送给了changeValue()中的x变量,而这个x变量也在内存空间中分配了一个存储单元 接下来,就来看java中的对象参数是怎么的: 同样,先给出一段代码: ... ... class person { public static String name = "Jack"; ... . 这时候,好戏上台了: 调用了changeName(),person作为对象参数入该,但是大家特别注意,它入的是什么!!! person引用变量将自己的存储单元的内容给了changeName()的p变量! 也就是将实体对象的地址给了p变量,从此,在changeName()中对p的一切操作都是针对p所指向的这个存储单元,与person引用变量所指向的那个存储单元再没有关系了!

    47490

    PHP变量值的

    变量的式,是指一个变量给另一个变量的内部细节形式——单对单. 值 互相独立,互不影响. <? php $v1 = 1; $v2 = $v1; // 值 $v1 = 10; echo 'v1='.$v1; // 10 echo 'v2='. 引用 &放在=后,此时都共同指向该数据空间,互不独立,互相影响. <? php $m1 = 1; $m2 = & $m1; // 引用式 $m1 = 10; echo 'v1='.

    18120

    扫码关注云+社区

    领取腾讯云代金券