java到底是值传递,还是引用传递?以前国内的java开发者有过很多争论,由于《Practical java》等书籍的引入,现在大家都知道java是严格的值传递,基本数据类型不会有什么问题,但是针对对象和数组,执行的结果,似乎应该是引用传递。
在《Practical java》中,给出了说明,针对对象和数组,事实上,传递的内容,是引用的值,而不是引用本身。但是怎么验证,网上没有例子,书上也没有给,现在给出一个例子,可以很好的说明,java确实是值传递。例子如下:
public class Test{
public void c(Model m1, Model m2){
Model m = m1;
m1 = m2;
m2 = m;
}
public void cd(int[] a, int[] b){
int[] c = a;
a = b;
b =c;
}
public static void main(String[] args){
Model m1 = new Model();
m1.setName("m1");
Model m2 = new Model();
m2.setName("m2");
Test app = new Test();
app.c(m1, m2);
System.out.println(m1.getName()+"---" + m2.getName());
int[] a = new int[]{1};
int[] b = new int[]{2};
app.cd(a, b);
System.out.println(a[0] + "----" + b[0]);
}
}
class Model{
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
打印的结果是
D:\>java Test
m1---m2
1----2
这是因为,m1和m2本身是对象的引用没错,但是传入方法c的参数,实际上是m1和m2的副本,因此只是两个副本进行了交换,而m1和m2本身并没有被交换。交换数组的方法cd,原理与之相同。
分享到:
相关推荐
无论是基本类型还是对象类型,参数传递都是以值的形式进行,但对象类型的值是其引用,允许我们在方法内修改对象的状态,而不影响方法外部的引用。这种特性使得Java能够实现封装和数据安全性,同时也为程序员提供了...
在Java编程中,验证字符串是否符合JSON(JavaScript Object Notation)格式是一项常见的任务,尤其是在进行前后端数据交互时。JSON是一种轻量级的数据交换格式,它允许数据以键值对的形式存储,易于人阅读和编写,...
Java验证AD域用户登录是企业级应用中常见的一种身份验证方式,主要用于确保只有授权的用户才能访问特定的系统或服务。AD(Active Directory)域是由微软Windows Server操作系统提供的目录服务,用于集中管理用户账户...
对于Java Web服务,通常使用SOAP(Simple Object Access Protocol)协议,它基于XML来传递数据。C#可以通过创建一个与Java Web服务的WSDL(Web Service Description Language)文件对应的代理类来实现调用。 1. **...
本问题聚焦于如何通过Java调用shell脚本,向DataX传递参数,特别是包含特殊字符的where条件。在实际操作中,这可能会涉及到字符串转义、参数安全传递以及shell命令的构建等多个技术点。 首先,我们需要理解DataX的...
根据提供的文件信息,我们可以深入探讨Java在短信验证过程中的实现方式。主要分为以下几个部分: ### 一、短信验证概述 短信验证是当前许多网站及应用为确保用户信息安全、防止恶意注册而采用的一种验证方式。其...
在实际开发中,我们经常需要在`Activity`和`AlertDialog`之间传递值,比如从`AlertDialog`中获取用户输入的数据,并将其显示在`Activity`的某个`TextView`上。下面我们将详细探讨如何实现这个功能。 首先,创建一个...
前端通过HTML收集用户输入,JavaScript进行初步校验,然后通过JSP将数据传递给Java后台,后台连接MySQL数据库进行最终验证。如果验证通过,用户会被认为已成功登录,否则将返回错误信息。这只是一个基础的实现,实际...
Java版的极验验证Demo是基于Java开发语言,主要用于后端服务器进行用户行为验证的一种解决方案。极验验证(Geetest)是一种智能验证码服务,旨在通过机器学习和行为分析技术,来区分真实用户与机器人,从而保护网站...
Java服务器端:环境配置为(Tomcat7.0+jdk1.8+MySQL+javaEE平台)使用Java语言搭建的服务器,通过json传递数据。 Android端:用Eclipse开发的。 功能描述:首次安装APP具有启动页,点击启动页后,进去登录页面。...
本教程将深入探讨如何在Java中使用Axis2构建一个包含SOAP Header验证的客户端。 首先,理解SOAP Header至关重要。SOAP Header是SOAP消息的一部分,用于传递非处理信息,如认证、交易、安全等。与SOAP Body不同,...
- 通常,我们在表单提交后验证成功或失败,会使用重定向来显示一个确认页面,此时就需要传递验证结果或错误信息。 7. **源码分析** - 深入理解Spring MVC的源码,可以了解`RedirectAttributes`是如何将数据封装并...
在JSP页面中,我们可以使用Java脚本来获取这些传递的值。这通过`HttpServletRequest`对象的`getParameter()`方法实现。例如,获取用户名的代码如下: ```jsp <%@ page language="java" import="java.util.*" ...
Spring Cloud Feign统一设置验证token实现方法解析 Spring Cloud Feign是一个基于Netflix的Feign组件,提供了一个简洁的方式来构建RESTful风格的微服务接口。Feign组件提供了一个统一的接口调用方式,使得微服务...
Java + JSP + Servlet 登录验证实例 Java Web 开发中,登录验证是一个基本的功能模块,本文将通过 JSP + Servlet 来实现一个简单的登录验证实例。 知识点一:数据库设计 在本实例中,我们使用 MySQL 数据库来存储...
这个章节可能涵盖了Java中一些容易混淆的概念,比如值传递与引用传递、静态与非静态、接口与抽象类的区别等,有助于深化对Java语言的理解。 通过这份笔记的学习,读者将能系统地掌握Java的核心知识,并具备解决...
知识点一:Java编程语言概述 Java是一种广泛使用的计算机编程语言,它以跨平台、免费...在验证引用传递时,可以通过修改一个对象的属性值,然后观察其他引用该对象的变量是否也被影响,从而判断是值传递还是引用传递。
Java 直接调用 Python 脚本并传递参数代码实例 Java 调用 Python 脚本传递参数是指在 Java 应用程序中调用 Python 脚本,并将参数传递给 Python 脚本,以实现特定的功能。在本篇文章中,我们将详细介绍 Java 调用 ...
2.4 方法(函数):定义、调用,参数传递(值传递和引用传递),返回值类型,重载和重写。 第三章:对象和类 3.1 面向对象编程(OOP)的基本原则:封装、继承、多态。 3.2 类的定义:字段(属性)和方法(行为)的...
在Java编程领域,生成二维码是一项常见的任务,常用于数据编码、信息传递以及验证等场景。本项目主题为“java生成二维码+邮箱验证+Base64加密”,涉及的技术点包括: 1. **Java二维码生成**:Java中实现二维码生成...