- 浏览: 587176 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (423)
- windows2003 (1)
- exception (3)
- java (91)
- eclipse (14)
- java web (3)
- javaScript (11)
- 装机 (1)
- sql (34)
- outlook (1)
- html (8)
- JAVA 不同区域服务器引起的乱码解决 (2)
- strtus (3)
- http (1)
- 设计模式 (4)
- Java对存储过程的调用方法 (0)
- java-数据库操作 (0)
- jdbc (7)
- dwr (2)
- 软件版本号 (1)
- jxls (1)
- ExtJS (3)
- Ajax (1)
- git (12)
- linux (20)
- mysql (14)
- maven (16)
- easyui (1)
- 日常备注 (1)
- spring (9)
- others (1)
- windows快捷键 (1)
- 工作备注 (9)
- 工作杂项 (0)
- photoshop (1)
- 开发环境配置 (0)
- jboss (1)
- 报表 (1)
- 图表 (1)
- fckeditor (1)
- 调试bug (2)
- 口令 (1)
- css (2)
- mongodb (7)
- restful (1)
- jsp (5)
- jpa (2)
- bug (1)
- js (2)
- Json (1)
- POI (1)
- xml (2)
- webstorm (1)
- java swing (1)
- ubuntu (3)
- mongo (27)
- 自我学习 (0)
- 草稿 (0)
- 单元测试 (1)
- 数据库 (2)
- ide (1)
- 大数据 (0)
- uml (1)
- spring-boot (1)
- mybatis (3)
- oracle (2)
- jetty (1)
- 学习 (0)
- 系统调优 (1)
- tomcat (2)
- kettle (1)
- 学习资源 (1)
- 架构 (2)
- database (4)
- idea (1)
- consul (1)
- hadoop (2)
- nginx (3)
- 认证 (1)
- 加密 (1)
- connection pool (1)
- loadrunner (1)
- tps (1)
- 翻墙工具 (1)
- redis (2)
- redis jedis shardjedis (1)
- spring boot (1)
- 认证授权 (1)
- ssh (1)
- svn (2)
- 多线程 (1)
最新评论
-
abcdeudi:
不错
接口和抽象类什么时候使用才合适? -
羽翼的心动:
POI中对Word处理,读取不到书签。如果要处理书签的话,就只 ...
POI根据模板(excel表头)导出excel -
pdf1192012:
高质量文章
接口和抽象类什么时候使用才合适? -
沐忆潼:
...
POI根据模板(excel表头)导出excel -
422937561:
高质量文章
接口和抽象类什么时候使用才合适?
当你问大多数程序员Java是传值还是传引用的时候,你可能会得到两种答案之一:(1)Java传递原始类型数据时使用的是传值方式;传递对象时则使用传引用方式;String类型的数据采用的是传值方式,因为字符串是不可变的。(2)Java传递所有参数都使用传值方式。
只有第二个答案是正确的。理解传值和传引用的区别的关键是要记住,当你向一个方法传递一个对象时,Java没有把对象放入堆栈,它只是拷贝对象的引用然后将这个引用的拷贝放入堆栈。也就是说,根据定义,Java使用的是传值方式。
证明
如果Java通过传引用方式传递对象,那么执行下面的代码就会交换保存在两个变量a和b中的引用,而相应的输出应该如下:
a: 4
b: 100
Swapped!
a: 100
b: 4
其实真正的动作是在方法的参数o1和o2中的引用,它并不影响原始变量a和b。下面是其实际输出:
a: 4
b: 100
Swapped!
a: 4
b: 100
public class SwapTip {
public static void main(String []args) {
Integer a = new Integer(4);
Integer b = new Integer(100);
System.out.println("a: " + a);
System.out.println("b: " + b);
swap(a, b);
System.out.println("Swapped!");
System.out.println("a: " + a);
System.out.println("b: " + b);
}
public static void swap(Object o1, Object o2) {
Object t = o1;
o1 = o2;
o2 = t;
}
}
为什么说这个争论的答案是有意义的?
很多参与过争论传递参数的方式的程序员最后都会说:“只是语义不同而已”或者是“没有关系,因为都理解它真正的工作原理。”
对于有经验的程序员来说这可能是一个语义问题,但是对于那么没有什么经验的程序员来说,情况就不一样了。对于程序员来说一个语言的黑拿越少,他们在用那种语言写程序的时候就能做得越好。
一个类比
对象引用与实例的关系就像遥控器与电视机的关系,引用控制对象就像遥控器控制电视机一样。如果一个遥控器的复制品给了另一个人,那么那个人也可以控制电视机。复制的遥控器对电视机的动作(比如说调节音量、改换频道或者调节时钟)对于它本身和原装遥控器来说都是可见的。如果那个人改装了复制的遥控器去控制另外一台电视机,那么原来的遥控器不会受到影响。
诚然,Java是通过传值还是传引用的方式来传递参数只是一个学术上的区别,只要我们知道期望哪种行为即可。但是有时候知道台后的事情也是重要的。
Java只有一种参数传递方式,那就是传值。它简单、有文档可查并且确实是如此。所以在下次你听到这个问题的时候你就会知道正确答案。
摘自:http://www.blogjava.net/zsh118/articles/24564.html
留意以下代码的执行结果
执行结果如下
此结果说明,当程序只是更改了对象引用的拷贝本身的值时,对原对象引用和原对象引用没有影响。而当程序利用对象引用的拷贝去修改了对象的值时,则会更改对象本身。
只有第二个答案是正确的。理解传值和传引用的区别的关键是要记住,当你向一个方法传递一个对象时,Java没有把对象放入堆栈,它只是拷贝对象的引用然后将这个引用的拷贝放入堆栈。也就是说,根据定义,Java使用的是传值方式。
证明
如果Java通过传引用方式传递对象,那么执行下面的代码就会交换保存在两个变量a和b中的引用,而相应的输出应该如下:
a: 4
b: 100
Swapped!
a: 100
b: 4
其实真正的动作是在方法的参数o1和o2中的引用,它并不影响原始变量a和b。下面是其实际输出:
a: 4
b: 100
Swapped!
a: 4
b: 100
public class SwapTip {
public static void main(String []args) {
Integer a = new Integer(4);
Integer b = new Integer(100);
System.out.println("a: " + a);
System.out.println("b: " + b);
swap(a, b);
System.out.println("Swapped!");
System.out.println("a: " + a);
System.out.println("b: " + b);
}
public static void swap(Object o1, Object o2) {
Object t = o1;
o1 = o2;
o2 = t;
}
}
为什么说这个争论的答案是有意义的?
很多参与过争论传递参数的方式的程序员最后都会说:“只是语义不同而已”或者是“没有关系,因为都理解它真正的工作原理。”
对于有经验的程序员来说这可能是一个语义问题,但是对于那么没有什么经验的程序员来说,情况就不一样了。对于程序员来说一个语言的黑拿越少,他们在用那种语言写程序的时候就能做得越好。
一个类比
对象引用与实例的关系就像遥控器与电视机的关系,引用控制对象就像遥控器控制电视机一样。如果一个遥控器的复制品给了另一个人,那么那个人也可以控制电视机。复制的遥控器对电视机的动作(比如说调节音量、改换频道或者调节时钟)对于它本身和原装遥控器来说都是可见的。如果那个人改装了复制的遥控器去控制另外一台电视机,那么原来的遥控器不会受到影响。
诚然,Java是通过传值还是传引用的方式来传递参数只是一个学术上的区别,只要我们知道期望哪种行为即可。但是有时候知道台后的事情也是重要的。
Java只有一种参数传递方式,那就是传值。它简单、有文档可查并且确实是如此。所以在下次你听到这个问题的时候你就会知道正确答案。
摘自:http://www.blogjava.net/zsh118/articles/24564.html
留意以下代码的执行结果
public class SwapTip { public static void main(String []args) { Test1 test=new Test1(1,2); System.out.println("a: " + test.getA()); System.out.println("b: " + test.getB()); swap(test); System.out.println("Swapped!"); System.out.println("a: " + test.getA()); System.out.println("b: " + test.getB()); } public static void swap(Object o1, Object o2) { Object t = o1; o1 = o2; o2 = t; } public static void swap(Object o) { Test1 t=(Test1)o; int temp = t.getA(); t.setA(t.getB()); t.setB(temp); } } class Test1{ private int a; private int b; public Test1(int a,int b){ this.a=a; this.b=b; } public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } }
执行结果如下
a: 1 b: 2 Swapped! a: 2 b: 1
此结果说明,当程序只是更改了对象引用的拷贝本身的值时,对原对象引用和原对象引用没有影响。而当程序利用对象引用的拷贝去修改了对象的值时,则会更改对象本身。
发表评论
-
文件上传
2017-02-05 09:47 412文件上传模块 -
@ModelAttribute注解的使用
2017-01-09 23:13 540https://my.oschina.net/u/176085 ... -
数组合并和判断数组包含某个元素
2017-01-09 23:10 538http://www.iteye.com/news/28296 ... -
项目创建流程
2017-01-09 23:06 404http://lion.newtouch.com/pages/ ... -
mysql 出现很多连接 sleep 问题
2017-01-09 23:00 714http://blog.csdn.net/lin_credib ... -
spring boot 学习
2016-11-28 17:05 384http://412887952-qq-com.iteye.c ... -
jxls excel上传数据
2016-11-22 15:27 556http://jxls.sourceforge.net/ref ... -
veloctiyengine gettemplate jsonobject.fromobject
2016-11-18 10:41 0/** 53. * test User 54. ... -
HDFS客户端的权限错误:Permission denied
2016-08-09 01:55 631http://www.linuxidc.com/Linux/2 ... -
java map中的key为object
2016-08-08 11:18 532http://zhidao.baidu.com/link?ur ... -
jdbc pool
2016-07-26 14:50 409[url]C:\Users\lwx328240\Desktop ... -
java 域是指什么
2016-07-15 15:36 541http://blog.csdn.net/iaiti/arti ... -
java jdbc/ojdbc 链接oracle的三种方式
2016-07-12 14:50 583http://blog.itpub.net/22664653/ ... -
java 编译器 解释器
2016-06-28 14:45 7170) javac 编译器 用于将java源代码文件编译成字节码 ... -
linux查看cpu、内存、版本信息
2016-06-24 21:44 543http://blog.chinaunix.net/uid-2 ... -
重定向控制台System.out.println输出到文件,再重定向回控制台
2016-06-24 20:18 512http://blog.csdn.net/jason_deng ... -
java 代码点 代码单元
2016-06-24 09:38 727http://blog.csdn.net/weizhaozhe ... -
java 日期
2016-06-24 09:39 350http://kingquake21.iteye.com/bl ... -
jdbc addBatch
2016-06-23 22:08 406http://www.360sdn.com/java/2014 ... -
java中的arrayList(动态数组)与静态数组
2016-06-21 20:26 950http://www.2cto.com/kf/201206/1 ...
相关推荐
### Java传值中的乱码问题及最简易的解决方法 在Java Web开发中,经常会遇到一个令人头疼的问题:客户端向服务器传递数据时出现乱码。这种情况不仅会影响用户体验,还可能导致程序逻辑错误。本文将深入探讨Java传值...
"lotus domnio java代理传值"这个主题主要涉及如何在Java代码中创建和使用代理,并在代理之间传递参数。 首先,让我们了解一下Lotus Domino Java代理的基本概念。在Lotus Domino Designer中,Java代理是用Java语言...
Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE...
根据标题和描述,我们将深入探讨Java中传值与引用的区别,以及它们在实际编程中的应用。 首先,Java是一种“总是按值传递”的语言。这意味着无论是基本类型还是引用类型,当作为参数传递时,都会有一个副本被创建并...
在Java编程语言中,"传值与传值后的改变"是一个关键的概念,涉及到函数调用时参数的传递方式。在Java中,有两种基本的数据类型:原始类型(如int, double, char等)和引用类型(如类实例、数组)。它们在函数调用时...
- Java端可以使用JSON库(如Jackson或Gson)将Java对象转换为JSON字符串,然后通过上述方式传递给JavaScript。 - JavaScript可以使用JSON.parse()解析接收到的JSON字符串,将其转换回JavaScript对象。 4. **Web...
JAVA传值与传引用[整理].pdf
在Java Web开发中,页面传值是不可或缺的一部分,主要用于用户在网页上填写信息后提交到服务器进行处理。本文将详细讲解如何在Java中通过表单(Form)进行页面传值的简单操作。 首先,我们需要了解HTML中的表单元素...
### Java及C++中传值传递、引用传递和指针方式的理解 在程序设计语言中,函数调用时参数的传递方式对理解程序的行为至关重要。本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用...
在本篇文章中,我们将详细探讨Struts2的三种主要的传值方式,并通过一个简单的Demo来加深理解。 1. **Action属性传值** Struts2的核心是Action类,每个Action类都代表一个特定的业务逻辑。我们可以通过在Action类...
本文将深入探讨Android Intent的多种传值方式。 1. **基本类型传值** - 使用`putExtra()`方法:Intent提供了`putExtra(String name, boolean value)`、`putExtra(String name, char value)`等方法,可以用来传递...
### JAVA中传值与引用问题详解 #### 一、引言 在计算机编程领域,特别是对于面向对象语言如Java而言,“传值”与“传引用”的概念是理解数据传递机制的关键所在。Java作为一种广泛使用的高级编程语言,在设计之初就...
### Java是传值还是传址引用 #### 一、简单类型是按值传递的 Java在处理简单数据类型(如int、boolean等)时采用的是按值传递的方式。这意味着当你将一个简单类型的值作为参数传递给一个方法时,实际上传递的是这...
### 几种JSP页面传值方式详解 在Java Web开发中,JSP(Java Server Pages)是一种常用的技术,用于创建动态网页。JSP页面之间的数据传递是实现前后端交互的关键环节之一。本文将详细介绍几种常见的JSP页面传值方式...
本篇文章将详细探讨引用类型的传值方式。 首先,理解引用类型的概念至关重要。引用类型包括类(classes)、接口(interfaces)、数组以及委托(delegates),它们在内存中的存储方式与值类型截然不同。对于引用类型...
首先,对于Java的基本数据类型(如int、char、byte、short、boolean、float、double),函数调用时是按照传值方式进行的。这意味着当一个基本类型的变量作为参数传递到函数时,函数接收的是这个变量的副本,而不是...
Flex与Java远程传值是Web开发中...通过这种方式,开发者可以创建出功能丰富的Web应用,同时享受到Flex的交互性和Java的后端处理能力。在实际开发中,这可以应用于各种场景,如实时数据展示、用户交互和业务流程控制等。
Ajax传值到Java方法中的实现 Ajax技术是当前Web开发中最流行的技术之一,能够实现页面的异步刷新和数据交互。但是,Ajax传值到Java方法中的实现却不是那么简单,需要了解Ajax的原理和Java的Web开发机制。 首先,...
本PPT深入探讨了这一主题,旨在帮助学习者彻底理解Java中的参数传递方式。 首先,我们要回顾面向对象的基本概念。在Java中,类(Class)是对象的蓝图,它定义了对象可能具有的属性(如name、age、gender)和方法...