java的设计者对底层的java实现代码做了太多封装,和C语言中的传递方式相比,复杂很多,而且还有很多种不同情况,让我们看一看:
大家先看看下面这一种情况:就是如果map中存放的是String,Integer等java内置对象时候,它里面存放的并不是真正的对象引用;但是当存放的是一般对象时,存放的就是类似于C语言中的引用,这时我们修改对象的同时也反映到Map中的,这相当于C语言中的真正的引用传递,传递的是对象的地址;但是内置对象就不同:
package test;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Person {
static final Log log = LogFactory.getLog(test.class);
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 :name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public static void main(String [] args){
Person p=new Person("afei",22);
Person p1=new Person("afei1",22);
Map hashmap=new HashMap();
Set hashset=new HashSet();
hashmap.put("person1",p);
hashmap.put("person2",p1);
hashset.add(p);
hashset.add(p1);
log.info(hashset.size());
p.age=90;
Integer count=3;
hashmap.put("count",count);
count=new Integer(count.intValue()+100);
log.info(((Person)hashmap.get("person1")).getAge());//输出90,值已经改变
log.info(((Integer)hashmap.get("count")));//依然输出3
}
}
同为对象但是内置对象与一般对象又有很多不同!
分享到:
相关推荐
参数传递 单个参数传递 多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,...
本文将详细探讨“线程间通信方式2:参数传递方式”,并通过对不同创建线程方法的分析,展示如何有效地传递参数。 1. **线程创建方法** 在Windows API中,我们通常使用以下三种方法创建线程: - **CreateThread...
2. **Ajax异步请求**:使用JavaScript的XMLHttpRequest对象或现代浏览器的Fetch API,可以向服务器发送POST请求,同时保持页面不刷新,实现参数传递。 **三、Cookie和Session的使用** 1. **Cookie**:服务器可以...
2. **多参数传递**: 多参数传递意味着在执行Kettle作业或转换时,需要传递多个参数值。这可能涉及到多个数据源、多个处理步骤或多个业务规则。在Kettle中,可以通过命令行参数、环境变量或者调用API的方式传递多个...
C# 调用 C++ 编写的 DLL 函数各种参数传递问题 在 C# 调用 C++ 编写的 DLL 函数时,参数传递是一个非常重要的部分。这篇文章将详细介绍 C# 调用 C++ 编写的 DLL 函数各种参数传递问题,包括不返回值的参数、带...
### Matlab GUI参数传递方式详解 #### 一、全局变量 全局变量是一种常见的数据共享方法,尤其是在Matlab GUI设计中。这种方式简单直接,适用于GUI内部不同控件之间以及不同GUI之间的数据共享。 **特点:** - **...
12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值...
在互联网应用中,网页间的参数传递是至关重要的,它使得用户在浏览不同页面时能够保持信息的连贯性。这个例子将深入探讨几种常见的网页间参数传递方法,以帮助你理解这一关键概念。 首先,我们有URL查询字符串。当...
在C#编程语言中,参数传递和参数调用是核心概念,它们关乎着函数和方法如何接收和处理数据。理解这些概念对于编写高效且可维护的代码至关重要。本篇文章将深入探讨C#中的参数传递机制及其应用。 首先,我们要了解...
函数调用/参数传递2”示例中,我们将深入探讨以下知识点: 1. **函数定义与声明**: 在C语言中,函数首先需要被声明,告诉编译器函数的存在和它的签名(名称、参数类型和返回类型)。然后,可以定义函数,提供实现...
在C++编程语言中,参数传递是函数调用过程中一个至关重要的概念,它决定了函数如何接收外部传入的数据。根据给定的文件信息,我们将深入探讨C++中的三种主要参数传递方式:值传递、指针传递和引用传递,并分析它们的...
C++指针参数传递内存详解 C++中的指针参数传递是一种常见的编程技术,但是许多开发者对其机理不甚了解,本文将深入剖析C++指针参数传递的内存机理,解决开发者们长期以来对函数指针参数传递的误解。 函数指针参数...
13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....
总之,易语言多线程传递多参数是一项关键的编程技能,它涉及到线程的创建、管理和参数传递。理解并掌握这些知识,能够帮助开发者编写出更高效、更稳定的程序。对于易语言的学习者来说,研究这个源码将是一个宝贵的...
在C#编程中,控制台程序之间的参数传递是一项常见的任务,尤其在系统集成或脚本自动化等场景下。本文将详细讲解如何从一个控制台应用程序(源程序)启动另一个控制台应用程序(目标程序),并传递参数字符串,以及...
2. **创建线程**:然后,在主线程中创建新的线程,并将参数传递给线程函数。使用 `创建线程` 命令,传入线程函数的入口地址和参数值,例如: ```易语言 创建线程, 线程函数入口, "要传递的文本" ``` 3. **线程...
通过URL参数传递数据是Web开发中常用的技术之一,它可以帮助开发者在不同页面间轻松共享数据。本文介绍了一个JavaScript函数用于从URL中获取参数,并提供了相应的代码示例。在实际应用中,应根据具体需求合理选择...