我分了三种类型的参数进行测试

一、基本类型

    public static void main(String[] args) {
System.out.println("验证基本类型int作为参数传入方法中进行修改后原值是否会改变");
int item1 = 1;
System.out.println("int:改变前值为" + item1);
changeInt(item1);
System.out.println("int:类型改变后值为" + item1);
System.out.println("-------------------------------------------------------"); } private static void changeInt(int param) {
param = 10;
System.out.println("int:方法中值为" + param);
}

打印结果:

这里我用的是int,基本类型算是比较简单明了,传入方法的参数是int item1的值拷贝,所以方法内改变的不是item1。

二、 引用类型

    public static void main(String[] args) {
System.out.println("验证引用类型ItemModel作为参数传入方法中进行修改后原值是否会改变");
System.out.println("第一次测试");
ItemModel item4 = new ItemModel("xiao ming");
System.out.println("ItemModel:改变前对象的hashCode为" + System.identityHashCode(item4) + " 值为" + item4.toString());
changeItemModel1(item4);
System.out.println("ItemModel:改变后对象的hashCode为" + System.identityHashCode(item4) + " 值为" + item4.toString()); System.out.println("第二次测试");
ItemModel item5 = new ItemModel("xiao ming");
System.out.println("ItemModel:改变前对象的hashCode为" + System.identityHashCode(item5) + " 值为" + item5.toString());
changeItemModel2(item5);
System.out.println("ItemModel:改变后对象的hashCode为" + System.identityHashCode(item5) + " 值为" + item5.toString());
System.out.println("-------------------------------------------------------"); } private static void changeItemModel1(ItemModel param) {
param.setName("xiao hong");
System.out.println("ItemModel:方法中对象的hashCode为" + System.identityHashCode(param) + " 值为" + param);
} private static void changeItemModel2(ItemModel param) {
param = new ItemModel();
param.setName("xiao hong");
System.out.println("ItemModel:方法中对象的hashCode为" + System.identityHashCode(param) + " 值为" + param);
} class ItemModel { private String name; public ItemModel() { } ItemModel(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "ItemModel{" +
"name='" + name + '\'' +
'}';
}
}

打印结果:

这里我打印了ItemModel的hashCode和toString方法,我们可以看到在第一次测试中,改变前、方法中、改变后对象的hashCode的是一样的,所以我们可以确认传入方法的是对象的引用,所以这一次原对象发生改变。在第二次测试的方法中,多了一行

param = new ItemModel();

这里一行是新创建了一个ItemModel对象,param被赋予了新的引用地址,所以能看到打印出的hashCode和原本是不一样的,所以第二次测试中原对象并没有被改变。

三、String 和 Integer

这里提一点,String和Integer对象都是不可改变的,每次重新赋值都是指向一个新的引用而已(可以参考上面的第二次测试)

    public static void main(String[] args) {
System.out.println("验证引用类型Integer作为参数传入方法中进行修改后原值是否会改变");
Integer item2 = new Integer(1);
System.out.println("Integer:改变前对象的hashCode为" + System.identityHashCode(item2) + " 值为" + item2);
changeInteger(item2);
System.out.println("Integer:改变后对象的hashCode为" + System.identityHashCode(item2) + " 值为" + item2);
System.out.println("-------------------------------------------------------"); System.out.println("验证引用类型String作为参数传入方法中进行修改后原值是否会改变");
String item3 = "xiao ming";
System.out.println("String:改变前对象的hashCode为" + System.identityHashCode(item3) + " 值为" + item3);
changeString(item3);
System.out.println("String:改变后对象的hashCode为" + System.identityHashCode(item3) + " 值为" + item3);
System.out.println("-------------------------------------------------------"); } private static void changeInteger(Integer param) {
param = 10;
System.out.println("Integer:方法中对象的hashCode为" + System.identityHashCode(param) + " 值为" + param);
} private static void changeString(String param) {
param = "xiao hong";
System.out.println("String:方法中对象的hashCode为" + System.identityHashCode(param) + " 值为" + param);
}

打印结果:

所以像这种不可变的引用类型,虽然传入的也是对象的引用,但是无论在方法中如何操作,原对象的值是不会发生变化的

Java方法传参,测试在方法内部改变参数内容是否会影响到原值的更多相关文章

  1. Java 常用类库一,main方法传参String[] args;获取输入Scanner ;hasNext();hasNextInt()

    1. main方法传参 package com.zmd.common_class_libraries; /** 给mian方法传参测试 */ public class MainArgsTest { p ...

  2. 再谈Java方法传参那些事

    把一个变量带进一个方法,该方法执行结束后,它的值有时会改变,有时不会改变.一开始会觉得--“好神奇呀”.当我们了解java内存分析的知识后,一切都是那么简单明了了--“哦,这么回事呀”.但是今天的上机 ...

  3. java的方法传参,最容易混淆的问题!!!

    参数传递 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了.这种传递方式,我们称为参数传递. 在这里 ...

  4. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!

    看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...

  5. 对象引用 方法传参 值传递 引用传递 易错点 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. python -- unittest测试用例函数无法传参的处理方法(ddt)

    1.超继承 重写测试用例类的init方法,如下所示. import requests import unittest class XiaoheiCases(unittest.TestCase): de ...

  7. MyBatis dao层 方法传参

    MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSER ...

  8. EasyUI queryParams属性 在请求远程数据同时给action方法传参

    http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方 ...

  9. javascript 字符串方法传参

    javascript 字符串方法传参由于嵌套的单引号,双引号过多.有点混乱.. 正确方法如下: '   <td align="left"><input type= ...

随机推荐

  1. @程序员,如何进入BAT这类一线公司?做到这几点的就有机会!

    跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师该如何规划准备,才能跳槽进入BAT这类一线互联网公司? 作者简介:中华石杉,十余年BAT架构经验,倾囊相授 我用了三个 “很多” 来形 ...

  2. 5.19 省选模拟赛 T1 小B的棋盘 双指针 性质

    LINK:小B的棋盘 考试的时候没有认真的思考 导致没做出来. 容易发现 当k>=n的时候存在无限解 其余都存在有限解 对于30分 容易想到暴力枚举 对称中心 然后 n^2判断. 对于前者 容易 ...

  3. three.js 自制骨骼动画(一)

    上一篇郭先生解析了一下官方的骨骼动画案例,这篇郭先生就要做一个稍微复杂一点的骨骼动画了,就拿一个小人下手吧.在线案例请点击博客原文.话不多说先上大图 骨骼动画在GUI上面都有体现.制作骨骼动画的步骤在 ...

  4. 要做重试机制,就只能选择 DelayQueue ?其实 RabbitMQ 它上它也行!

    原文链接:要做重试机制,就只能选择 DelayQueue ?其实 RabbitMQ 它上它也行! 一.场景 最近研发一个新功能,后台天气预警:后台启动一条线程,定时调用天气预警 API,查询现有城市的 ...

  5. 笨办法学python3练习代码ex19.py

    定义函数的语法: def  函数名(参数) (语句) #函数和变量 #函数里的变量与脚本里的变量是没有联系的. def cheese_and_crackers(cheese_count,boxes_o ...

  6. [NOI2012]随机数生成器【矩阵快速幂】

    NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...

  7. Android html5和Android之间的交互

    今天补充了会昨天的问题,然后搞半天又出现莫名其妙的问题. 今天讲的是交互,先说html5在Android的调用. 上面的hello world上面的部分都是安卓里的布局 然后按这些布局自动生成代码. ...

  8. python8.2线程锁

    import threading lock=threading.Lock()#创建线程锁:互斥锁num=100def run(name): lock.acquire()#设置锁 global num# ...

  9. 微信公众号怎么添加附件?比如word文档,pdf文件等

    微信公众号怎么添加附件?比如word文档,pdf文件等   我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众 ...

  10. css实现折扇效果

    总结思路: 1.首先进行结构的书写   <div class="box"></div> 2.要进行图片的重叠要用到position定位,需要重叠的元素及子元 ...