`
Java.天道2011
  • 浏览: 9439 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

对Java中值传递与引用传递的理解

阅读更多
在Java中值传递与引用传递一直是争议挺大的,一方说没有引用传递,一方说值传递传递实际值,而引用传递传递地址。下面我来以一种“进化”的方式说说我的理解。
假设一般的类型的传递称为是“初级”,String类型的传递是“中级”,而其它类型(都是类)的传递是“高级”,下面以一个几个例子来解释为何如此称呼。
例:
public  static void main(String [] asd){


        int a = 10;

        int b = a;

        a = 100;


        System.out.println(a,b);


}

输出的是100,10。
以原本的说法是跟着变量一起存储的是实际值,而后进行的是实际值的传递。
而以我的观点认为跟着变量一起存储的是地址,而后进行的是地址的传递,只是它是“初级”的,因此不具备一个变量的改变影响另一个变量。

例:
public static void main(String [] asd){

       String s = "a";

       String s1 = s;

       s = "b";

       System.out.println(s,s1);

}

输出的值是a,b
而原来的说法在这里的争议最大,因此有人说Java中没有引用传递。
而以我看来String类型是介于“初级”与“高级”的过渡期,称为“中级”,即进化还不完全,从输出值中可以看出它与“初级”的类似处,但String本身是一个类,但还没完全具备“高级”的功能,因此称为“中级”。

例:
public static void main(String [] asd){

       Student stu = new Student();

       stu.getName("张三");

       Student stu2 = stu1;

       stu.getName("李四");

       System.out.println(stu,stu2);
     
}
输出的值为李四,李四
我在此处的理解与原来的说法相同,传递的是地址,这是“高级”具备的功能,即一个变量的改变影响另一个变量。
分享到:
评论
1 楼 sangeook 2012-08-23  
public static void main(String [] asd){

       String s = "a";

       String s1 = s;

       s = "b";

       System.out.println(s,s1);

}

输出的值应该是:b,a吧
请确认一下。

相关推荐

    Java中值传递和引用传递的区别

    本文将通过示例代码详细介绍Java中值传递和引用传递的区别,并对其进行深入分析。 一、值传递 值传递是一种常见的参数传递机制,在这种机制中,实参传递给形参的是值。形参和实参在内存上是两个独立的变量,对形参...

    JAVA中值类型和引用类型的区别

    总的来说,了解Java中的值类型和引用类型及其区别对于理解和优化代码的性能至关重要。它们在内存管理、参数传递和对象生命周期等方面都有不同的行为,熟练掌握这些概念可以帮助开发者编写出更高效、更稳定的代码。在...

    Python中 传递值 和 传递引用 的区别解析

    Python中的参数传递机制与一些其他语言(如C++或Java)中的机制不同,这导致了在传递变量时可能产生一些误解。 首先,我们来解释一下什么是值传递和引用传递。在值传递中,函数接收的是原始数据的一个副本,对这个...

    java 各公司面试题

    在第一个问题中,涉及到字符串变量`str`的作用域以及Java中值传递与引用传递的概念。Java中,基本数据类型是值传递,而对象(如字符串)则是引用传递。然而,由于字符串在Java中是不可变的,即使在方法中改变了`str`...

    Java当中的内存分配.pdf

    这个例子展示了Java中值传递的特点,即使对象的属性在方法内部被修改,原始对象的属性也会受到影响,这是因为传递的是对象引用的副本,而不是对象本身。这种行为与某些其他语言(如C++或C#)中的引用传递不同,后者...

    定义比较器,比较数组中值大小

    本文将深入探讨如何定义比较器来比较数组中值的大小,并通过一个具体的示例进行说明。 首先,我们需要了解Java中的Comparator接口。Comparator接口提供了一个方法`compare(T o1, T o2)`,用于比较两个对象的顺序。...

    java面试题之try中含return语句时代码的执行顺序详解

    这个规则解释了为何示例代码的输出是0,而不是1,同时也揭示了Java中值传递和对象引用传递的区别。理解这一点对于编写可靠的异常处理代码至关重要,特别是在处理资源清理(如关闭流)等场景时。

    实验二 方法的定义、重载;数组的应用 定义一个数组,并获取该数组中值最小的元素

    实验的源代码`Example24.java`中,`main`方法是程序的入口点,它首先定义了数组`arr`,然后调用`getMin`方法并将数组作为参数传递。`getMin`方法计算出最小值后,`main`方法将其打印出来。运行这段代码,将输出数组`...

    电子类软硬件面试集锦

    1 C++函数中值的传递方式有哪几种? 答:C++函数的三种传递方式为:值传递、指针传递和引用传递。 2 头文件的作用是什么? 答:一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向...

    利用Java8 Optional如何避免空指针异常详解

    在传统的 Java 代码中,我们通常需要在调用可能存在 null 值的方法或字段前进行 null 检查,如上述例子中对 computer、soundcard 和 usb 的多次检查。这种方式虽然可以避免空指针异常,但会使代码变得冗长且不易阅读...

    java学习笔记

    - **referenced**:引用,指通过引用变量指向对象。 - **variable**:变量,存储数据的标识符。 - **dimension**:维度,通常指数组的维度。 - **defined**:定义,创建类、接口、方法等的过程。 - **conversion**:...

    Java统计英文句子中出现次数最多的单词并计算出现次数的方法

    除Java程序设计的相关知识外,文章末尾还推荐了一些对Java学习者有帮助的工具和资料,包括在线字数统计工具、字符统计与编辑工具、Java数据结构与算法教程、Java操作DOM节点技巧总结、Java文件与目录操作技巧汇总...

    matlab开发-MUGplusY

    唯一梯度指数稳定中值(Mugplus)算法是一种改进的中值滤波技术,它在处理非局部均值去噪的基础上,增加了对梯度信息的考虑,使得滤波效果更加稳定。 中值滤波是一种非线性的信号处理方法,它通过用输入信号中的一...

    专业试卷中兴\计算机专业试题(01

    6. 将B类对象传递给接受A类引用的func函数,可以通过定义B到A的构造函数或者重载操作符`A()`。 7. `static`关键字在全局变量、局部变量和函数上的区别: - `static`全局变量只在定义它的文件中可见,生命周期始于...

    openCv_JniLibs

    注意,为了优化性能,应尽量减少数据在Java和C++之间的传递,避免不必要的内存拷贝。 总之,OpenCV_JniLibs是一个专门为Android设备上的armeabi-v7a架构编译的OpenCV库,通过JNI接口,可以在Android应用中利用...

Global site tag (gtag.js) - Google Analytics