`

Java call by value 和call by reference 的理解

    博客分类:
  • java
 
阅读更多
    Java中参数的传递有两种,一种是按值传递(传递的是具体的值,如基础数据类型),另一种是按引用传递(传递的是对象的引用,即对象的存储地址)。
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的call by value和call by reference

    详解Java的call by value和call by reference Java是一种面向对象的编程语言,它支持两种传递参数的方式:call by value和call by reference。理解这两种方式对于Java开发者来说非常重要,这篇文章将详细解释这两种...

    09.Dictionary.A.hashing.Call-by-value

    Call-by-value与“Call-by-reference”(引用传递)相对,后者传递的是参数的引用,因此在函数内部对参数的修改会影响到实际参数。 知识点五:词典(Dictionary) 在编程中,词典是一种数据类型,其中的每个元素都...

    华为java笔试面试题.pdf

    6. call by value 和 call by reference 的区别是什么?(答:call by value 不会改变实际参数的数值,call by reference 能改变实际参数的容) 7. 在类方法中可以用什么来调用本类的类方法?(答:可以用 this 来...

    Java参数传递PPT

    当讨论方法参数时,有两种术语经常被提及:值传递(Call by Value)和引用传递(Call by Reference)。Java参数传递的规则是:**Java只使用值传递,但这种值传递对于对象参数表现为类似引用传递的行为。** 在值传递...

    java面试题

    - **解析**:Java中对基本类型的传递采用call by value方式,对对象的传递则是传递对象的引用,这类似于call by reference。传递引用本身并不会改变引用的地址,但是可以通过引用改变对象的内容。 7. **类方法...

    华为java笔试面试题.doc

    6. 可以用 call by value 和 call by reference 两种方式来传递参数。 7. 在类方法中可以调用本类的类方法,但不能调用实例方法。 多项选择题 1. Java 程序的种类有 Applet、Application 和 Servlet。 2. 环境变量...

    C C++之指标 (pointer)参考 (reference) 观念整理与常见问题

    3. call by value, call by address (或 call by pointer), call by reference? - call by value:函数接收的是实参的副本,对副本的修改不会影响到原始变量。 - call by address 或 call by pointer:函数接收的是...

    java题目[归类].pdf

    变量及其作用域的理解也很关键,例如,call by value和call by reference是两种参数传递方式。call by value不会改变实际参数的值,而call by reference可以改变实际参数的内容,但Java中并没有真正的call by ...

    软件开发工程师(JAVA)笔试题

    - Java 中参数传递分为按值传递 (`call by value`) 和按引用传递 (`call by reference`)。 - **答案解析**:选项 A 正确,`call by value` 只传递值的副本;选项 B 错误,Java 中没有真正的 `call by reference`;...

    2023年java面试题+答案.docx

    2. call by value 不会改变实际参数的数值,而 call by reference 能改变实际参数的内容。 3. 在类方法中不能调用实例方法,但可以调用本类的类方法。 Java 面向对象语言 1. Java 面向对象语言不容许单独的过程与...

    经典的Java面试题目

    6. 参数传递方式中,call by value不会改变实际参数的值,而call by reference可以改变实际参数的内容,但不能改变其引用地址。所以,选项A、C、D正确。 7. 类方法中不能使用`this`关键字,也不能直接调用实例方法,...

    java笔试题汇总.pdf

    13. Java的参数传递方式是按值传递(Call by Value),这意味着方法内部无法直接改变实参的值,因此A正确。按引用传递(Call by Reference)是其他一些语言中可能出现的概念,但在Java中不存在,因此B、C错误。按...

    JAVA期末复习

    - 调用函数时,值类型传递的是值的副本(call by value),而引用类型传递的是引用(call by reference)。 - **标识符命名规则** - 必须以字母、下划线(`_`)或美元符号(`$`)开头。 - 后续字符可以包含字母、数字、...

    Java经典面试题大全(带答案)

    - **知识点**:传值(call by value)与传引用(call by reference)的区别。 - **解释**:Java中基本类型是按值传递的,而对象则是按引用传递的。这意味着对对象的修改会影响到原始对象,但不会改变对象本身的引用...

    java 面试题

    解析:Java采用call by value,但对象引用是按值传递的,所以call by reference可以改变对象的实际内容。 6. 下列说法错误的有? 正确答案:A.在类方法中可用this来调用本类的类方法 解析:this关键字在类方法...

Global site tag (gtag.js) - Google Analytics