java中方法传入参数时:值传递还是址传递?
JAVA中的数据类型有两大类型:
① 基本数据类型:逻辑型(boolean)、文本型(char)、整数型(byte、short、int、long)、浮点型(float、double)
② 引用数据类型:类(class)、接口(interface)、数组(array).
JAVA中方法传入参数有两种方式:
①值传递:当方法中传入的是基本数据类型, 此时形参传递的是副本, 不改变原来的要传入的参数值
②址传递:当方法中传入的是引用数据类型时, 把形参和实参的指针指向了堆中的同一对象, 是址传递,会改变原来要传入的参数
demo:
1. 首先编写一个类,待会用到.
package www.heima.com;
public class Birthdate {
private int day;
private int month;
private int year;
public Birthdate(int day, int month, int year) {
super();
this.day = day;
this.month = month;
this.year = year;
}
public void setDay(int day){
this.day = day;
}
public void setMonth(int month){
this.month = day;
}
public void setYear(int year){
this.year = year;
}
public int getDay(){
return day;
}
public int getMonth(){
return month;
}
public int getYear(){
return year;
}
@Override
public String toString() {
return "Birthdate [day=" + day + ", month=" + month + ", year=" + year + "]";
}
}
2. 具体讲述:
package www.heima.com;
public class Testdate {
public void change1(int i){
i = 1234;
System.out.println("i.value = "+i);
}
public void change2(Birthdate b){
b = new Birthdate(22, 2, 2004);
System.out.println("b = "+b);
}
public void change3(Birthdate b){
b.setDay(300);
System.out.println("b.hashCode = "+b.hashCode());
}
public static void main(String[] args){
int date = 9;
Birthdate d1 = new Birthdate(1, 1, 2000);
Testdate td = new Testdate();
td.change1(date);
System.out.println("date.value = "+date);
td.change3(d1);
System.out.println("d1 hashCode = "+d1.hashCode());
}
}
运行结果:
i.value = 1234
date.value = 9
b.hashCode = 366712642
b.value = Birthdate [day=300, month=1, year=2000]
d1 hashCode = 366712642
d1.value = Birthdate [day=300, month=1, year=2000]
从上数结果中可以看出:形参b与实参d1具有相同的hashcede, 也即具有相同的值;形参 i与实参date具有不同的值.
[注]:针对不同的方法, 调用方法的作用域不一样.
[注]:如果一个方法前面没有static, 就必须先new一个对象, 才能调用此方法.
[注]:方法调用完后,为这个方法分配的所有局部变量的内存空间消失.
java中方法传入参数时:值传递还是址传递?的更多相关文章
- 《Java中方法的参数传递方式只有一种:值传递》
//方法的参数传递机制(1):基本类型做形参的传递. class PrimitiveTransferTest { public static void swap(int a,int b) { //下面 ...
- HTML编码的用户输入------阻止向Controller的方法传入参数时用链接注入javascript代码或者HTML标记
- Java里方法的参数传递方式
Java里方法的参数传递方式只有一种:值传递. Java中参数传递的都是参数值 下面从两个维度来看 1.传递的参数是8种基本数据类型 这个比较好理解,8种基本数据类型,作为参数时,可以理解为原来的一个 ...
- Java:方法的参数是传值还是传引用
Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...
- 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)
先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...
- mvc中view与controll之间传递参数时,可以使用url进行传递
mvc中view与controller之间传递参数时,可以使用url进行传递,但是在url的地址中需要加上“id=123”这样的东西才行. 具体如代码: window.location.href = ...
- JAVA中List对象去除重复值的方法
JAVA中List对象去除重复值,大致分为两种情况,一种是List<String>.List<Integer>这类,直接根据List中的值进行去重,另一种是List<Us ...
- 深入理解Java中方法的参数传递机制
形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...
- C#中方法的参数的四种类型
C#中方法的参数有四种类型: 1. 值参数类型 (不加任何修饰符,是默认的类型) 2. 引用型参数 (以ref 修饰符声明) 3. 输出型参数 (以out 修 ...
随机推荐
- hadoop环境搭建-伪分布模式
Appache hadoop 版本:2.77 jdk:1.8 系统:centos7 注意不要在root下解压,要单独建一个用户安装hadoop及其组件. 一.先查看系统是否有自带j #dk: r ...
- Lucene-----信息检索技术
1 信息检索概述 1.1 传统检索方式的缺点 • 文件检索 操作系统常见的是硬盘文件检索 文档检索:整个文档打开时已经加载到内存了; 缺点:全盘遍历, ...
- QT4.8.6之qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
想试着用qt写一个爬虫,编译的时候报如下错误 qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error qt. ...
- ES6的Module系统
http://es6.ruanyifeng.com/#docs/module Module 的语法 概述 严格模式 export 命令 import 命令 模块的整体加载 export default ...
- OracleLinux安装说明
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页 回到顶级页面:PostgreSQL索引页 [作者 高健@博客园 luckyjackgao@gmail. ...
- PyQt5 简易计算器
剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 [知识点] 1.利用循环添加按钮部件,及给每个按钮设置信号/槽 2.给按钮设置固定大小:button.setFixedSi ...
- 3992: [SDOI2015]序列统计
3992: [SDOI2015]序列统计 链接 分析: 给定一个集和s,求多少个长度为n的序列,满足序列中每个数都属于s,并且所有数的乘积模m等于x. 设$f=\sum\limits_{i=0}^{n ...
- python爬虫之图片懒加载、selenium和phantomJS
一.什么是图片懒加载 在网页中,常常需要用到图片,而图片需要消耗较大的流量.正常情况下,浏览器会解析整个HTML代码,然后从上到下依次加载<img src="xxx"> ...
- 菜鸟vimer成长记——第1章、统一概念
不管学什么技术,我都深信概念是最重要的.是影响整个学习轨迹,决定能在这个技术领域高度. 当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了. 目的 ...
- 第一次玩github,第一个开源小项目——xxoo
引言 由于最近的工作写代码比较少,这让LZ产生了一丝危机感.于是便想找一个办法可以没事自己写写代码,自然而然就想到了github.接下来便是一阵捣鼓的过程,其实整个过程很快,主要过程就是注册一个账号, ...