先复制一个面试/笔试的题:

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答案:
是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值。在C#中可以编写如下所示的代码,但是在Java中却做不到。
java中的按值传递和按址传递(按引用传递),要明白这两个概念,要理解按值和按址。
下面举个简单的例子来说明:
比如你去国外旅行,拍了一张特别好的照片,你想分享给你的朋友,那么有两种方式,第一种是你直接将这个照片发送给你的朋友,也就是给你朋友这个照片的副本;第二种是假如你将这张及其好的照片上传到一个QQ(微博)等,你将会得到一个访问这个照片的地址(Url),此时在将这个url分享给你的朋友。
如上例子,第一种可以认为是按值传递,第二种可以认为是按址传递(按引用传递)。知道了这个概念。在进行下面的简单分析。
按值传递:只有当参数为基本类型变量的时候,java按这种策略的方式传递。
上面的分享照片,你的朋友拿到的照片是你的副本,那么朋友对照片的修改不会影响你的照片,你对照片的修改也不会影响到你给朋友分享的照片。
按址传递:只有当参数为引用类型变量,java按这种策略方式进行传递。
上面的Url地址给朋友,那么如果朋友也有修改的权限,朋友对照片进行操作,自己访问的照片就是朋友操作结果后的结果。
下面通过代码来解释这个例子:
package com.dufy.reforvalue;
import java.util.Arrays;
/**
* java中 按值传递和按址传递
* 按值传递:基本类型变量-按值传递,按值传递通过复制获取参数的副本
* 按址传递:引用类型变量-按址传递,按址传递通过传递对象的引用地址
*
* @author dufy
* @creation 2017年2月9日
*/
public class ReferenceOrValue {
/**
* 基本类型,按值传递
* 举例:给朋友分享你的照片,对方接收的是你的照片的一个实际的副本,
* 你和朋友分别对各自的照片进行操作,不会影响彼此的照片!
*/
public static void testVal(int photo){
photo++;//朋友对照片进行修改
System.out.println("My friend see photo = " + photo);
}
/**
* 引用类型:按址传递
* 举例:给朋友分享你的照片,分享的是你上传网上的一个照片的Url(地址),
* 你和朋友都可以通过这个地址访问照片,并对照片进行一个操作!
*/
public static void testRef(Photo photo){
photo.setPhoto("java Photo,Great!");//朋友对你的照片进行修改
System.out.println("My friend see photo = " + photo.getPhoto());
}
/**
* 引用类型:按址传递
* 因为数组是一个引用类型。所以传递进去的是它们的引用,故在方法中互换了它们的值,也必然影响到它们原来的值.
*/
public static void testArrayRef(int[] array){
for (int i = 0; i < array.length; i++) {
array[i] = 0;
}
System.out.println("testArrayRef array is = "+Arrays.toString(array));
}
public static void main(String[] args) {
//一:按值传递
int photo = 10;//定义要发送的照片
testVal(photo);//将照片发发送你朋友,朋友得到的是一个副本
System.out.println("My see photo = " + photo);
//二:按址传递
Photo p = new Photo();//定义一个照片的对象,我自己拍摄的java photo
p.setPhoto("java photo");
testRef(p);//将照片对象(即 Url地址) 发送你朋友,朋友得打的是一个Url(地址),Url打开才是照片
System.out.println("My friend see photo = " + p.getPhoto());
//三:数组也是对象,数组在堆内存。引用是在栈。
int array[] = {1,2,3,4,5};
testArrayRef(array);
System.out.println("array is = "+Arrays.toString(array));
}
/**
* 照片类
*/
static class Photo{
String photo;
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
}
}
输出的结果如下:
My friend see photo = 11
My see photo = 10
My friend see photo = java Photo,Great!
My friend see photo = java Photo,Great!
testArrayRef array is = [0, 0, 0, 0, 0]
array is = [0, 0, 0, 0, 0]
小插曲:有下下面这一道题:这个method应该怎么写呢?
public static void main(String[] args) {
int a = 10;
int b = 20;
method(a,b);//需要在method被调用后,仅打印出a=100,b=200,请写出method(a,b)方法!
System.out.println("a = " + a);
System.out.println("b = " + b);
}
肯定有很多人和我之前一样,想都没想就写出下面的代码:
private static void method(int a, int b) {
a*=10;
b*=10;
}
但是运行结果后你会发现,没有打印出理想的结果!
这时候如果你仔细看来了上面的介绍就不难理解为什么会出现这样的结果了!
给出这道题可能正确的结果:
private static void method(int a, int b) {
System.out.println("a=100,b=200");
System.exit(0);
}
以上所述是小编给大家介绍的Java按值传递和按址传递(面试常见),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java值传递和地址传递
# Java值传递之swap()方法不能交换的解决
# 一文秒懂java到底是值传递还是引用传递
# JAVA参数传递方式实例浅析【按值传递与引用传递区别】
# java通过实例了解值传递和引用传递
# 深入了解为什么Java中只有值传递?
# Java中值传递和引用传递的区别
# 解析Java按值传递还是按引用传递
# 详解java的值传递、地址传递、引用传递
# 探讨Java中函数是值传递还是引用传递问题
# 为什么Java中只有值传递
# 的是
# 你的朋友
# 影响到
# 给朋友
# 可以通过
# 你和
# 送你
# 第二种
# 小编
# 第一种
# 是一个
# 这一
# 如果你
# 是在
# 来了
# 也有
# 给你
# 将会
# 才是
# 在此
相关文章:
微课制作网站有哪些,微课网怎么进?
如何快速搭建高效简练网站?
如何快速搭建支持数据库操作的智能建站平台?
建站主机类型有哪些?如何正确选型
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
如何续费美橙建站之星域名及服务?
宝塔面板如何快速创建新站点?
建站之星安装需要哪些步骤及注意事项?
广平建站公司哪家专业可靠?如何选择?
宝塔建站后网页无法访问如何解决?
网站制作公司,橙子建站是合法的吗?
建站之星如何保障用户数据免受黑客入侵?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何将凡科建站内容保存为本地文件?
动图在线制作网站有哪些,滑动动图图集怎么做?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何选择PHP开源工具快速搭建网站?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何用IIS7快速搭建并优化网站站点?
如何在建站之星绑定自定义域名?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
招贴海报怎么做,什么是海报招贴?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
定制建站流程步骤详解:一站式方案设计与开发指南
建站之星下载版如何获取与安装?
成都网站制作报价公司,成都工业用气开户费用?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
威客平台建站流程解析:高效搭建教程与设计优化方案
网站制作企业,网站的banner和导航栏是指什么?
创业网站制作流程,创业网站可靠吗?
建站主机CVM配置优化、SEO策略与性能提升指南
建站上市公司网站建设方案与SEO优化服务定制指南
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
为什么Go需要go mod文件_Go go mod文件作用说明
常州自助建站费用包含哪些项目?
如何解决ASP生成WAP建站中文乱码问题?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何通过虚拟主机快速完成网站搭建?
如何选择香港主机高效搭建外贸独立站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
TestNG的testng.xml配置文件怎么写
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何选购建站域名与空间?自助平台全解析
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。