- 浏览: 595381 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Java中参数的传递有两种,一种是按值传递(传递的是具体的值,如基础数据类型),另一种是按引用传递(传递的是对象的引用,即对象的存储地址)。
从上面的代码可以了解:
1.按值传递时在调用的方法中,参数只是实际参数的一个拷贝。所以不管参数在方法里面如何修改都不会改变原来参数值。也就是说val的值一直保持不变。
2.按引用传递时会产生一份新的引用(不妨叫做y)。此时x和y指向了同一个对象。当调用setStringVal方法时引用拷贝即y指向了另一个对象("345")此时并不会改变x引用的值,所以打印的是234。当调用changeStringVal时y引用改变了对象的实际的值,此时x和y指向的还是同一个对象。所以打印的是234123。
从上面的分析我们可以得出以下结论:
1.call by value不会改变实际参数的数值。
2.call by reference不能改变实际参数的参考地址。
3.call by reference能改变实际参数的内容。
main() { //按值传递 int val = 20 ; print(val) ; //打印的是20 setVal(val); print(val) ; //打印的还是20 //按引用传递 StringBuffer val = new StringBuffer("234"); print(val.toString()) ;//打印的是234 setStringVal(val) ; print(val.toString()) ;//打印的是234 changeStringVal(val); print(val.toString()) ;//打印的是234123 } void setVal(int val) { val = 10 ; } void setStringVal(StringBuffer val) { val = new StringBuffer("345"); } void changeStringVal(StringBuffer val) { val = val.append("123") ; }
从上面的代码可以了解:
1.按值传递时在调用的方法中,参数只是实际参数的一个拷贝。所以不管参数在方法里面如何修改都不会改变原来参数值。也就是说val的值一直保持不变。
2.按引用传递时会产生一份新的引用(不妨叫做y)。此时x和y指向了同一个对象。当调用setStringVal方法时引用拷贝即y指向了另一个对象("345")此时并不会改变x引用的值,所以打印的是234。当调用changeStringVal时y引用改变了对象的实际的值,此时x和y指向的还是同一个对象。所以打印的是234123。
从上面的分析我们可以得出以下结论:
1.call by value不会改变实际参数的数值。
2.call by reference不能改变实际参数的参考地址。
3.call by reference能改变实际参数的内容。
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1225在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 943java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 640(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 980server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1694在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 475/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1611REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 11591.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1610如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 649传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4901.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2431MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1773java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1085Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 429import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 665CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 3161、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2144import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7831.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 579注意事项hibernate配置文件必须设置自动提交否则不能插入 ...
相关推荐
详解Java的call by value和call by reference Java是一种面向对象的编程语言,它支持两种传递参数的方式:call by value和call by reference。理解这两种方式对于Java开发者来说非常重要,这篇文章将详细解释这两种...
Call-by-value与“Call-by-reference”(引用传递)相对,后者传递的是参数的引用,因此在函数内部对参数的修改会影响到实际参数。 知识点五:词典(Dictionary) 在编程中,词典是一种数据类型,其中的每个元素都...
6. call by value 和 call by reference 的区别是什么?(答:call by value 不会改变实际参数的数值,call by reference 能改变实际参数的容) 7. 在类方法中可以用什么来调用本类的类方法?(答:可以用 this 来...
当讨论方法参数时,有两种术语经常被提及:值传递(Call by Value)和引用传递(Call by Reference)。Java参数传递的规则是:**Java只使用值传递,但这种值传递对于对象参数表现为类似引用传递的行为。** 在值传递...
- **解析**:Java中对基本类型的传递采用call by value方式,对对象的传递则是传递对象的引用,这类似于call by reference。传递引用本身并不会改变引用的地址,但是可以通过引用改变对象的内容。 7. **类方法...
6. 可以用 call by value 和 call by reference 两种方式来传递参数。 7. 在类方法中可以调用本类的类方法,但不能调用实例方法。 多项选择题 1. Java 程序的种类有 Applet、Application 和 Servlet。 2. 环境变量...
3. call by value, call by address (或 call by pointer), call by reference? - call by value:函数接收的是实参的副本,对副本的修改不会影响到原始变量。 - call by address 或 call by pointer:函数接收的是...
变量及其作用域的理解也很关键,例如,call by value和call by reference是两种参数传递方式。call by value不会改变实际参数的值,而call by reference可以改变实际参数的内容,但Java中并没有真正的call by ...
- Java 中参数传递分为按值传递 (`call by value`) 和按引用传递 (`call by reference`)。 - **答案解析**:选项 A 正确,`call by value` 只传递值的副本;选项 B 错误,Java 中没有真正的 `call by reference`;...
2. call by value 不会改变实际参数的数值,而 call by reference 能改变实际参数的内容。 3. 在类方法中不能调用实例方法,但可以调用本类的类方法。 Java 面向对象语言 1. Java 面向对象语言不容许单独的过程与...
6. 参数传递方式中,call by value不会改变实际参数的值,而call by reference可以改变实际参数的内容,但不能改变其引用地址。所以,选项A、C、D正确。 7. 类方法中不能使用`this`关键字,也不能直接调用实例方法,...
13. Java的参数传递方式是按值传递(Call by Value),这意味着方法内部无法直接改变实参的值,因此A正确。按引用传递(Call by Reference)是其他一些语言中可能出现的概念,但在Java中不存在,因此B、C错误。按...
- 调用函数时,值类型传递的是值的副本(call by value),而引用类型传递的是引用(call by reference)。 - **标识符命名规则** - 必须以字母、下划线(`_`)或美元符号(`$`)开头。 - 后续字符可以包含字母、数字、...
- **知识点**:传值(call by value)与传引用(call by reference)的区别。 - **解释**:Java中基本类型是按值传递的,而对象则是按引用传递的。这意味着对对象的修改会影响到原始对象,但不会改变对象本身的引用...
解析:Java采用call by value,但对象引用是按值传递的,所以call by reference可以改变对象的实际内容。 6. 下列说法错误的有? 正确答案:A.在类方法中可用this来调用本类的类方法 解析:this关键字在类方法...