`
peonyzzdx
  • 浏览: 592146 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

按值传递和按引用传递

 
阅读更多
Java中只有按值传递,没有按引用传递!

package test;  
  
public class TestOne {  
      
    public static void name(int x){  
        x++;  
    }  
      
    public static void main(String[] args) {  
        int x = 0 ;  
        name(x);  
        System.out.println("------>x的值为: " + x);  
    }  
} 


运行结果 : ------>x的值为: 0 


public class PassbyValue {

	public void increment(String t) {
		t = "meili";
		System.out.println(t); // 输出为1
	}

	public static void main(String[] args) {
		String t = "美丽";
		PassbyValue ps = new PassbyValue();
		ps.increment(t);
		System.out.println(t);
	}
}



运行结果:meili
美丽


package test;  
  
class Cat{  
    int x = 0;  
}  
  
public class TestTwo {  
    public static void name(Cat cat){  
        cat.x++;  
    }  
      
    public static void main(String[] args) {  
        Cat c = new Cat();  
        name(c);  
        System.out.println("------>x的值为: " + c.x);  
    }  
} 


运行结果 : ------>x的值为: 1 



在Java只有按值传递,可能有人会奇怪传递进来如是对象,它会改变对象的值,例如:
Java代码 
public class Test{ 
   int i; 
   public void increment(Test t){ 
       t.i++; 
       System.out.println(i);   //输出为1 
   } 
   public static void main(String[] args){ 
       Test t = new Test(); 
       t.increment(t); 
       System.out.println(t.i); //输出也为1 
   } 


这的确是改变了对象的值,但它并没有改变对象引用的值,它还是指向原来的对象,我们传递进来的是对象引用并不是对象,造成这种错误的认识主要是没有理解对象和对象引用的区别,我们可以将对象理解为气球,而对象引用可理解为拉着气球的线,所以这还是按值传递;

如果在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),即在方法调用时,实际参数把对对象的引用(地址)传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象(数组),方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。


一般面试题中都会考Java传参的问题,并且它的标准答案是Java只有一种参数传递方式:那就是按值传递,即Java中传递任何东西都是传值。如果传入方法的是基本类型的东西(值传递适用于Java中的八大基本数据类型和String),你就得到此基本类型的一份拷贝。如果是传递引用,就得到引用的拷贝。

总结:java中只要按值传递,参数是八大基本数据类型和String,值不改变,如果是其他,会改变
[/size]
0
0
分享到:
评论

相关推荐

    Java:按值传递还是按引用传递详细解说

    在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点并非完全对立,而是根据不同的角度来描述Java中的参数传递...

    Java的按值传递和按引用传递分析.rar

    Java编程语言中有两种参数传递方式:按值传递和按引用传递。理解这两种方式对于编写高效、无误的代码至关重要。 1. **按值传递(Pass by Value)** - Java中的基本类型(如int, double, char等)是按值传递的。这...

    C++单向按值传递(产生临时对象) 双向按引用传递(不产生临时对象不占任何内存).rar

    总结,C++中的按值传递和按引用传递各有优缺点,程序员需要根据具体需求权衡选择。在编写高效且安全的代码时,理解并熟练运用这两种传递方式至关重要。同时,注意在处理复杂对象或数据结构时,按引用传递通常更为...

    值传递和引用传递

    ### 值传递和引用传递详解 #### 一、引言 在计算机编程中,值传递和引用传递是两种常见的参数传递方式。这两种传递方式在不同的编程语言中有不同的实现细节,但其核心概念是相似的。本文将详细介绍值传递和引用传递...

    值传递,指针传递,引用传递的区别,内含可运行代码和详细解释

    另一方面,值传递由于形参和实参内存地址不一样,有些功能并不能实现(swap()),因此,除了极为简单的函数会使用值传递外,大多数会采用引用传递。而对于指针传递,则在涉及数组的情况下使用较多,因为指针本身会给...

    引用类型按值传递举例.png|引用类型按值传递举例.png

    Js引用类型按值传递的题目:两个变量间赋值时,以及作为变量给函数传参时,只是将原变量中的值复制一个副本给对方变量或形参变量 i. 对于原始类型的值,修改新变量,不影响原变量 ii. 对于引用类型的值的值,因为...

    java 值传递和引用传递的比较

    在Java编程语言中,了解值传递和引用传递的概念至关重要,因为它们直接影响到函数参数的处理方式。下面将详细探讨这两个概念及其区别。 首先,我们来理解什么是值传递。在Java中,基本数据类型(如int、double、...

    C语言地址传递与值传递

    C语言中的函数调用机制包括值传递(value passing)和地址传递(address passing),通常被称为按值传递和按引用传递。C语言默认使用的是值传递机制,但是可以通过传递指针来实现类似地址传递的效果。下面将详细介绍这两...

    Java中的按值传递和按引用传递的代码详解

    Java中的按值传递和按引用传递的代码详解 本文通过实例代码详细解释了Java中的按值传递和按引用传递的相关知识。通过实验,我们可以了解Java中基本类型和引用类型的传递机制。 按值传递 在Java中,基本类型的变量...

    java值传递与引用传递

    在Java编程语言中,函数参数的传递方式有两种:值传递和引用传递。理解这两种机制对于编写高效、无误的代码至关重要。以下是对这两种传递方式的详细解析。 首先,值传递是指函数调用时,实际参数的值被复制一份传给...

    Remoting简单例子(按值和按引用传递的比较)

    首先,我们需要了解在编程中,按值传递和按引用传递的基本概念: 1. **按值传递**:当函数或方法接收到一个参数时,会创建该参数的一个副本。任何对副本的修改都不会影响原始变量。在.NET中,基本类型如int、bool等...

    Java面向对象值传递和引用传递

    Java 面向对象值传递和引用传递 Java 面向对象编程中,参数传递是非常重要的一个概念。参数传递有两种方式:值传递和引用传递。了解这两种方式的区别是非常重要的,因为它们对程序的执行结果产生了很大的影响。 值...

    深入浅析JS是按值传递还是按引用传递(推荐)

    在JavaScript中,参数传递主要有两种形式:按值传递和按共享传递,但这种分类并不完全准确。JavaScript的基本数据类型(如数字、字符串、布尔值、null、undefined)是真正意义上的按值传递,而对象类型则更接近于一...

    C#笔记值传递和引用传递

    在C#编程语言中,了解值传递和引用传递的概念至关重要,因为这直接影响到函数或方法如何处理参数。本文主要探讨这两个概念以及与之相关的知识点。 首先,值传递是指当一个方法或函数调用时,实际参数(即调用时提供...

    LabVIEW中引用的概念及在VI间传递值

    在VI间传递值,通常有三种方式:按值传递、按引用传递和按共享变量传递。按值传递是最常见的,但会创建数据副本,可能导致性能下降。相比之下,按引用传递能避免这种问题,因为只有引用本身被传递,而不是实际数据。...

    Delphi值传递和引用传递实例

    了解并熟练掌握值传递和引用传递的原理和使用场景,是每个Delphi程序员的基本功。通过实践和分析具体实例,例如提供的"zhichuandi"文件中的代码,可以更深入地理解这两种传递方式的差异和应用。

Global site tag (gtag.js) - Google Analytics