JAVA基本数据类型、引用数据类型-参数传递详解
1:基本类型的参数传值
对于基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,是一个副本。实参的精度级别应等于或低于形参的精度级别,否则报错。
class JB{
void f(int x, int y){
x=x+;
y=y+;
System.out.printf("参数x和y的值分别是:%d, %d\n", x, y);
}
}
public class CS {
public static void main(String[] arg){
int x=;
int y=;
JB jb=new JB();
jb.f(x, y);
System.out.printf("main方法中x和y的值分别是:%d, %d\n", x, y);
}
}
结果:
参数x和y的值分别是:11, 13
main方法中x和y的值分别是:10, 12
2:引用类型的参数传值
引用类型包括类、数组以及后面将要学习的接口。当形参是引用类型时,实参传给形参的值是对象的引用。如果修改形参引用的对象,那么实参引用的对象也会发生同样的变化。因为实参的引用拷贝给了形参,所以实参和形参引用同一个对象,对形参引用对象的修改就相当于对实参引用对象的修改。
如果修改的不是形参引用的对象而是形参值本身,也就是让形参指向其它对象,则实参值和实参引用的对象都不改变。
class A{
int N;
A(int n){
N = n;
}
void setN(int n){
N = n;
}
int getN(){
return N;
}
}
class A2 extends A{
A2(int n) {
super(n);
}
}
class B{
void f(A a){
a.setN(12);
// a = new A2(111);
System.out.println("在执行方法f时, 形参a修改了自己的N值");
System.out.println("当前形参mouse的N值: " + a.getN());
}
}
main
B b = new B();
A a = new A(2);
System.out.println("在调用方法f之前,实参a的N值: "+ a.getN());
b.f(a);
System.out.println("在调用方法f之后, 实参a的N值: " + a.getN());
结果: 在调用方法f之前,实参a的N值: 2
在执行方法f时, 形参a修改了自己的N值
当前形参a的N值: 12
在调用方法f之后, 实参a的N值: 12
注意:形参指向其它对象这句话的理解,a = new A2(111);让mouse又指向了另一个对象,所以他所修改后的值和实参没有关系,实参的值和引用都不会改变。在代码中新加入的A2就是继承了A,通过方法传入的是A(a)的对象的引用,把a = new A2(111);那么之后改变是A2的内容,和A就无关了,所以A(实参)的引用对象和值都不变。
结果:
在执行方法f时, 形参a修改了自己的N值
当前形参a的N值: 111
在调用方法f之后, 实参a的N值: 2
JAVA基本数据类型、引用数据类型-参数传递详解的更多相关文章
- MySQL数据类型以及基本使用详解
MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端 ...
- Java中对象、对象引用、堆、栈、值传递以及引用传递的详解
Java中对象.对象引用.堆.栈.值传递以及引用传递的详解 1.对象和对象引用的差别: (1).对象: 万物皆对象.对象是类的实例. 在Java中new是用来在堆上创建对象用的. 一个对象能够被多个引 ...
- python引用和对象详解
python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...
- 牛客网 Java 工程师能力评估 20 题 - 详解
牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...
- java程序运行时内存分配详解
java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下 一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...
- Java程序在内存中运行详解
目录 Java程序在内存中运行详解 一.JVM的内存分布 二.程序执行的过程 三.只有一个对象时的内存图 四.两个对象使用同一个方法的内存图 五.两个引用指向同一个对象的内存图 六.使用对象类型作为方 ...
- 【转】Java魔法堂:String.format详解
Java魔法堂:String.format详解 目录 一.前言 二.重载方法 三.占位符 四.对字符.字符串进行格式化 五.对整数进行格式化 六. ...
- (7)Java数据结构--集合map,set,list详解
MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...
- java线程池的使用与详解
java线程池的使用与详解 [转载]本文转载自两篇博文: 1.Java并发编程:线程池的使用:http://www.cnblogs.com/dolphin0520/p/3932921.html ...
- Java线程创建形式 Thread构造详解 多线程中篇(五)
Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...
随机推荐
- 高阶篇:4.2.1)DFMEA框架搭建,填写项目与要求
本章目的:明确DFMEA的数量及目标,搭建框架,填写项目与要求. 1.步骤: 1)明确DFMEA的数量及目标: 2)搭建框架(所有DFMEA的): 3)填写项目与要求: 2.1明确DFMEA的数量及目 ...
- 编写第一个Go程序
编码格式 Go语言源码文件编码格式必须是 UTF-8 格式,否则会导致编译器出错. 结束语句 在 Go 程序中,一行代表一个语句结束.每个语句不需要像其它语言一样以分号 ";"结尾 ...
- ASP.NET中类的多语言编译
App_Code 文件夹中同时使用多种语言编程的方法 在web.config文件里,加入如下的配置 <configuration> <system.web> <comp ...
- Qt4.8.5移植
这两天搞了Qt移植 因为不小心 耽误了挺多时间 但是也比较好的掌握了 现在记录一下 准备工具: tslib-1.16 qt-everywhere-opensource-src-4.8.5.tar ...
- Partition Array by Odd and Even
Partition an integers array into odd number first and even number second. Example Given [, , , ], , ...
- (转)浅谈 Linux 系统中的 SNMP Trap
原文:https://www.ibm.com/developerworks/cn/linux/l-cn-snmp/index.html 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前, ...
- C# 实现IP视频监控(摄像头)画面推送(简单的不能再简单的DEMO)
最近继续在家休息,在完成上一个Python抓取某音乐网站爬虫后,琢磨着实现一个基于HTTP推送的 IP视频监控,比如外出的时候,在家里 开启一个监控端(摄像头+服务端),可以看到实时画面,如果再加上自 ...
- datepicker97切换年月日再连续点击下拉中日期的bug出现问题
解决办法: function wdateOption(fmt){ if(fmt===undefined){fmt="yyyy-MM-dd"} return{ dateFmt:fmt ...
- java多线程开发,Executors、FutureTask、Callable
java多线程如何应用呢,几乎学java的同学都知道Thread类和Runable接口.继承Thread类或者实现Runable接口,调用thread的start方法即可启动线程. 然后是线程池,就是 ...
- Vue路由开启keep-alive时的注意点
Vue路由开启keep-alive时的注意点 这个不是业务的要求,但是看到每次进入页面就重新渲染DOM然后再获取数据更新DOM,觉得作为一个前端工程师有必要优化下的加载逻辑,正好vue提供了 ke ...