今天看到了一个这样的题:
public static void main(String[] args){
Point point1 = new Point(0,0);
Point point2 = new Point(0,0);
modify(point1,point2);
System.out.println("["+point1.x+","+point1.y+"]"+"["+point2.x+","+point2.y+"]");
}
public static void modify(Point point1,Point point2){
Point temp =point1;-------1
point1=point2;--------2
point2=temp;---------3
point1.setLocation(5, 5);
point2 = new Point(5,5);
}
最后打印的是什么:【0,0】【5,5】
这道题诠释了java关于传参的两种方式即值传递和引用传递。
值传递应该很好理解,即把变量的实际值传个方法的参数。同时我们要弄清方法的形参和实参是不同的变量,不能相互代替。
那引用传递简单点就是把对象在内存中的地址传给形参。所以上面那个题应该这样理解,
main方法里面的point1代表的Point对象的地址传给了modify形参的point1同理point2也是一样的。但当执行到modify中的2处时就变了,因为modify中的point1代表的地址值变成了main方法中的point2的地址了,所以modify中接下来的point1.setLocation(5, 5);改变的是main中的point2对象的中的值,modify方法中point2在3处指向了main方法中的point1的地址了,如果在这之后调用point2的方法更新,那更新的将是main方法中的point1对象的值。但最后point2指向了一个新对象。所以就和main中的point1,point2没有半毛关系了。
所以说java中值传递传的是基本类型和不可变对象例如String对象。而引用传参传的是对象的地址而已,且不要把形参和实参理解成是相同的变量哦,其实就是不同的变量而指向相同的地址而已。因为变量存储在栈内存中,对象是存储在堆内存中。
分享到:
相关推荐
"Java开启新线程并传参方法代码实现" Java开启新线程并传参方法代码实现是Java编程语言中一个重要的知识点,主要介绍了如何在Java中开启新线程并传参的方法代码实现。本文通过示例代码介绍的非常详细,对大家的学习...
#### 四、示例代码分析 下面通过一个简单的示例来理解RMI的实现过程: ##### 远程接口定义(`Rem.java`) ```java import java.rmi.*; public interface Rem extends Remote { public String getMessage() ...
通过上述分析,我们可以看出,使用Java的预编译SQL语句进行数据库的增、删、改操作不仅提高了代码的重用性和可维护性,还增强了应用程序的安全性和执行效率。这种“万能”的操作方式在实际开发中具有极高的实用价值...
本文将深入探讨Java中的方法调用、值传递与引用传递,并通过字节码分析来进一步理解这些概念。 首先,我们来看方法调用。在Java中,方法是一组完成特定任务的代码块,可以通过方法名来调用执行。方法调用的基本语法...
#### 原因分析 GET请求中的参数是通过URL直接传递的,当参数包含中文字符时,如果URL编码不正确或者服务器端没有正确地解码这些参数,就会出现乱码问题。主要原因包括: 1. **客户端与服务器端编码不一致**:...
通过阅读和分析这个代码,你可以更深入地理解如何在实际项目中处理这类问题。 总的来说,处理`HttpsURLConnection`中中文字符的关键在于正确设置字符集,确保数据在编码和解码过程中的一致性。同时,对SSL/TLS配置...
通过以上分析,我们可以看到该案例提供了一个基本框架,演示了如何利用 Java 与 SWT 库来操作 Codesoft。这种方式适用于需要集成打印功能的应用程序,特别是在企业级应用中,这种技术可以极大地简化开发流程并提高...
Java中的隐式传参详解 通过字节码看Java中的this隐式传参是Java语言中一个非常重要的概念,本文将通过示例代码详细介绍如何通过字节码看Java中的this隐式传参的相关资料。下面我们将详细解释this关键字的隐式传参...
对于JSP项目中通过URL传参涉及到特殊字符的情况,正确的做法是在前端使用JavaScript的`encodeURIComponent()`函数进行编码,在后端使用Java的`URLDecoder.decode()`进行解码。这样可以确保特殊字符被正确处理,避免...
具体来说,这个过程涉及解析Java字节码文件,从中提取条件语句信息、传参信息和调用信息。这些信息是分析反序列化漏洞传播的关键。接下来,利用这些信息来创建控制流图,并在控制流图的基础上,使用污点分析技术标记...
在这个名为"Java可变参数demo"的示例中,开发者通过分析Android蓝牙框架层的源码,对Java的可变参数有了更深入的理解,并编写了一个小的演示程序以备后用。下面我们将详细探讨Java可变参数的相关知识点。 1. 可变...
此外,通过传参的方式生成PDF,意味着可以根据用户输入或程序动态参数来生成定制化的PDF内容。例如,可以从URL接收参数,或者在命令行中传递参数,根据这些参数调整PDF的内容。 示例代码中的`extPDF.java`可能包含...
总之,理解JVM的工作机制,掌握如何正确传递参数,避免大对象使用,处理好内存管理和线程安全,以及熟练运用JVM分析工具,都是Java开发中不可或缺的技能。通过这些实践和案例学习,开发者能够更好地优化代码,提升...
本文实例讲述了vue-router 路由传参用法。分享给大家供大家参考,具体如下: 在设置路由规则时,我们可以给路径名设置一个别名,方便进行路由跳转,而不需要去记住过长的全路径。 例如: <%@ taglib prefix=...
#### 五、实战案例分析 假设有一个新闻系统,其中新闻表`news`包含以下字段:`id`, `title`, `content`。为了方便展示,我们需要将新闻的标题和内容合并成一篇完整的文章,但又不想直接在数据库中存储合并后的全文,...
5.2.2 分析由JSP生成的Servlet代码 5.3 JSP基本语法 5.3.1 JSP表达式 5.3.2 在JSP中嵌入Java代码 5.3.3.JSP声明 5.3.4.JSP表达式语言(EL) 5.3.5 实例:用EL函数替换HTML中的特殊字符 5.3.6 ...
5.2.2 分析由JSP生成的Servlet代码 5.3 JSP基本语法 5.3.1 JSP表达式 5.3.2 在JSP中嵌入Java代码 5.3.3.JSP声明 5.3.4.JSP表达式语言(EL) 5.3.5 实例:用EL函数替换HTML中的特殊字符 5.3.6 JSP页面...
最后,我们通过反编译源码来分析REMOVE方法的调用原理。结果表明,反编译代码中都是调用实例方法的命令,這也证明了JVM在编译时确定调用的传参类型,静态分派到具体方法的。 本文详细介绍了JAVA LIST接口的REMOVE...