`

参数传递2

阅读更多

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
 
}
}
同为对象但是内置对象与一般对象又有很多不同!

1
0
分享到:
评论

相关推荐

    mybatis 动态sql及参数传递

    参数传递 单个参数传递 多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,...

    线程间通信方式2:参数传递方式

    本文将详细探讨“线程间通信方式2:参数传递方式”,并通过对不同创建线程方法的分析,展示如何有效地传递参数。 1. **线程创建方法** 在Windows API中,我们通常使用以下三种方法创建线程: - **CreateThread...

    访问网站的参数传递代码

    2. **Ajax异步请求**:使用JavaScript的XMLHttpRequest对象或现代浏览器的Fetch API,可以向服务器发送POST请求,同时保持页面不刷新,实现参数传递。 **三、Cookie和Session的使用** 1. **Cookie**:服务器可以...

    kettle实现多参数传递并且循环加载数据.zip

    2. **多参数传递**: 多参数传递意味着在执行Kettle作业或转换时,需要传递多个参数值。这可能涉及到多个数据源、多个处理步骤或多个业务规则。在Kettle中,可以通过命令行参数、环境变量或者调用API的方式传递多个...

    c# 调用C++编写 的DLL函数各种参数传递问题。

    C# 调用 C++ 编写的 DLL 函数各种参数传递问题 在 C# 调用 C++ 编写的 DLL 函数时,参数传递是一个非常重要的部分。这篇文章将详细介绍 C# 调用 C++ 编写的 DLL 函数各种参数传递问题,包括不返回值的参数、带...

    Matlab GUI参数传递方式

    ### Matlab GUI参数传递方式详解 #### 一、全局变量 全局变量是一种常见的数据共享方法,尤其是在Matlab GUI设计中。这种方式简单直接,适用于GUI内部不同控件之间以及不同GUI之间的数据共享。 **特点:** - **...

    12.参数传递之值传递.zip

    12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值...

    两个网页之间参数传递例子

    在互联网应用中,网页间的参数传递是至关重要的,它使得用户在浏览不同页面时能够保持信息的连贯性。这个例子将深入探讨几种常见的网页间参数传递方法,以帮助你理解这一关键概念。 首先,我们有URL查询字符串。当...

    c# 参数传递,参数调用

    在C#编程语言中,参数传递和参数调用是核心概念,它们关乎着函数和方法如何接收和处理数据。理解这些概念对于编写高效且可维护的代码至关重要。本篇文章将深入探讨C#中的参数传递机制及其应用。 首先,我们要了解...

    c代码-9.函数调用/参数传递2

    函数调用/参数传递2”示例中,我们将深入探讨以下知识点: 1. **函数定义与声明**: 在C语言中,函数首先需要被声明,告诉编译器函数的存在和它的签名(名称、参数类型和返回类型)。然后,可以定义函数,提供实现...

    c++中参数传递方式讨论

    在C++编程语言中,参数传递是函数调用过程中一个至关重要的概念,它决定了函数如何接收外部传入的数据。根据给定的文件信息,我们将深入探讨C++中的三种主要参数传递方式:值传递、指针传递和引用传递,并分析它们的...

    C++指针参数传递内存详解

    C++指针参数传递内存详解 C++中的指针参数传递是一种常见的编程技术,但是许多开发者对其机理不甚了解,本文将深入剖析C++指针参数传递的内存机理,解决开发者们长期以来对函数指针参数传递的误解。 函数指针参数...

    13.java参数传递之引用传递.zip

    13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....

    易语言多线程传递多参数

    总之,易语言多线程传递多参数是一项关键的编程技能,它涉及到线程的创建、管理和参数传递。理解并掌握这些知识,能够帮助开发者编写出更高效、更稳定的程序。对于易语言的学习者来说,研究这个源码将是一个宝贵的...

    C#控制台程序之间参数传递

    在C#编程中,控制台程序之间的参数传递是一项常见的任务,尤其在系统集成或脚本自动化等场景下。本文将详细讲解如何从一个控制台应用程序(源程序)启动另一个控制台应用程序(目标程序),并传递参数字符串,以及...

    易语言多线程传递文本参数两种方法

    2. **创建线程**:然后,在主线程中创建新的线程,并将参数传递给线程函数。使用 `创建线程` 命令,传入线程函数的入口地址和参数值,例如: ```易语言 创建线程, 线程函数入口, "要传递的文本" ``` 3. **线程...

    HTML页面地址栏参数传递与获取

    通过URL参数传递数据是Web开发中常用的技术之一,它可以帮助开发者在不同页面间轻松共享数据。本文介绍了一个JavaScript函数用于从URL中获取参数,并提供了相应的代码示例。在实际应用中,应根据具体需求合理选择...

Global site tag (gtag.js) - Google Analytics