20161203

Java中函数参数的传递是按值传递。下面证明Java中参数传递是完完全全是传值而不是传址。一:package com.sitinspring;  

public class ChangeClass{      public void changeInt(int i){          i=5;      }  

public void changeLong(long i){          i=555;      }  

public void changeString(String str){          str="5555";      }  

public void changeMember(Member member){          member=new Member("Cindy",35);      }  

public void changeMemberField(Member member){          member.setAge(20);          member.setName("Andy");      }  

public static void main(String[] args){          ChangeClass changeClass=new ChangeClass();  

int intValue=10;          changeClass.changeInt(intValue);          System.out.println(intValue);  

long longValue=10;          changeClass.changeLong(longValue);          System.out.println(longValue);  

String stringValue="1234";          changeClass.changeString(stringValue);          System.out.println(stringValue);          

Member member2=new Member("Douglas",45);          changeClass.changeMember(member2);          System.out.println(member2);  

Member member=new Member("Bill",25);          changeClass.changeMemberField(member);          System.out.println(member);      }  }  二:

package com.sitinspring;  

public class Member{      private String name;      private int age;  

public Member(String name,int age){          this.age=age;          this.name=name;      }  

public String toString(){          return "Member name="+name+" age="+age;      }  

public int getAge() {          return age;      }  

public void setAge(int age) {          this.age = age;      }  

public String getName() {          return name;      }  

public void setName(String name) {          this.name = name;      }      }  输出:10101234Member name=Douglas age=45Member name=Andy age=20解释:第一个输出10是因为int是基本类型,传递的参数是intValue的拷贝,对拷贝的修改对原值intValue没有影响.第二个输出10和上面是一个道理.第三个输出1234.由于String是类类型, str是stringValue的地址拷贝,参数str指向的地址和stringValue的一致,  但在函数changeString 中,由于String的特殊性, str=“5555”和str=new String(“5555”)是等价的, str指  向了新的”5555”所在的地址,此句后str就与原来的stringValue彻底脱离了联系.第四个输出Member?name=Douglas?age=45的道理和上面相同.第五个输出Member?name=Andy?age=20是因为changeMemberField函数中修改了参数member 的值,也就是修改member  指向实例的值,而这个实例正是member指向的值,因此member就变成了name=Andy 且age=20.结论:Java中参数传递的都是值,对应基本类型,传递的是原值的拷贝;对于类类型,传递的是引用即地址的拷贝.对于函数对参数的改变是否会影响原值的问题:值类型自然不会影响到原值.而对于类类型要看改变的是参数的地址还是值,如果是前者,参数和原引用指向了不同的地址,它们自然脱离了关系;如果是后者,修改的实例就是原引用指向的实例,这当然对原值进行了修改.
时间: 2024-10-08 20:07:26

20161203的相关文章

玄学开包加垫刀 [20161203]

昨天用辛苦攒的2000多金币加任务奖励一共开了35包左右加基森,结果1橙都没出,非洲土著的身份暴露无遗,疑似被垫刀.今天早上用RMB买60包再试下运气. 玄学姿势摆好,好运来唱起来,鼠标放到第一张卡,等等,橙色的,传说??? 原来是郭夫人,失敬失敬,但近期基本用不到这卡 - -!,没SMLY. 陆陆续续开了20分钟,一共4橙,只能说凑合吧,毕竟昨天垫刀35包0橙卡,果然是非洲土著. . 还有一些重复数量超过9的卡.

Python -- pdb调试工具

诗歌是一种忧郁的媒体,而诗人的使命是孤独的:     -- 北岛<时间的玫瑰> 学习是一首深邃的民谣,而我们的任务是享受他.     -- 小Q <20161203> ------------------------------------------------------------------------------------------------ 学c++时,老师教我们有gdb调试工具,在工作中会经常用到: 学shell时,经理让我见到了"-x"跟踪

MySQL_杭州北仓 12.3-12.7需求活动期间累计下单达到3天及以上的客户_20161212

#C025_02杭州北仓 12.3-12.7需求活动期间累计下单达到3天及以上的客户明细 SELECT d.*,CASE WHEN 下单天次>=3 THEN "下单超过3天" ELSE "下单不足3天" END AS 标识 FROM ( SELECT a.城市,仓库,a.用户ID,a.用户名称,b.用户地址,b.联系电话,c.销售员,COUNT(订单日期) AS 下单天次,SUM(订单数) AS 订单数,SUM(金额) AS 金额 FROM ( SELECT

Linux系统shell脚本编程——生产实战案例

Linux系统shell脚本编程--生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [[email protected] scripts]

Linux上命令的使用格式和基础命令详解

一.Linux上命令的使用格式 命令行提示符详解: 用户通过终端的命令行接口来控制操作系统,登陆后如下: [[email protected] ~]# root: 当前登录的用户 @:分隔符 localhost: 当前主机的主机名,非完整格式:此处的完整格式为:localhost.localdomain [[email protected] ~]# hostname localhost.localdomain ~:用户当前所在的目录(current directory),也称为工作目录(work

Jackson(使用注解)

jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties此注解是类注解,作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响. @JsonIgnore此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样. @JsonFormat此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@Jso

Linux系统1.md

计算机 介绍 电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具. 在现代,机械计算机的应用已经完全被电子计算机所替换,其所相关的技术研究叫计算机科学,而"计算机技术"指的是将计算机科学的成果应用于工程实践所派生的诸多技术性和经验性成果的总合."计算机技术"与"计算机科学"是两个相关而又不同的概念,它们的不同在于前者偏重于实践而后者偏重于理论.此外,电子计算机亦被形象地称作电脑.至于由数据为核

shell脚本示例

#!/bin/bash ####################################################### # Name:         shell_exp.sh # Version:      v21.0 # Function:     Backup MySQL Databases Template Script # Author:       zz # Create Date:  2016-12-03 # Description:  study ########

for 路路 temp

<?xml version='1.0' encoding='utf-8'?><PACKET> <HEAD> <SERVICE_NAME>syncData</SERVICE_NAME> <C_CRT_CDE>122222</C_CRT_CDE> <FLOWID>21705f10-3e24-45ba-9b2e-db1ed523c5ab</FLOWID> <INTERFACEID>253581