`
geeksun
  • 浏览: 965057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java只有值传递?

 
阅读更多

传统的看法认为,java有两种传递,值传递和引用传递,值传递是基本数据类型的传递,如int,long,byte,引用传递是对象传递时,实际传递的是栈空间对象地址的引用。

有一种看法认为,引用传递实际也是值传递,因为传递的引用不是引用地址本身,而是引用地址的拷贝,从这个意义上来说,也相当于把引用地址的值当作参数传递,同基本数据类型的传递是拷贝一份数据传过去,是相同的。

请参考一下

 

class Letter {
    char c;
}
public class PassObject {
	
    static void assign(Letter y) {
        y.c = 'b';
    }
    
    public static void main (String[] args) {
        Letter x = new Letter();
        x.c = 'a';
        System.out.println(x.c);
        
        assign(x);
        System.out.println(x.c);
    }
    
    
}

 

在方法assign里,传递进来的y是Letter对象的引用地址的拷贝,对引用地址拷贝的操作,影响到原拷贝的改变,所以对象的属性得到了赋值改变。

 

 

class Number {
    int i;
}
public class Assignment {
    public static void main (String[] args) {
        Number n1=new Number();					// n1引用对象n1的内存地址
        Number n2=new Number();					// n2引用对象n2的内存地址
        
        Number n3 = n1;
        
        n1.i=9;									
        n2.i=47;
        System.out.println("(1)n1.i:"+n1.i+"-------->n2.i:"+n2.i);
        n1=n2;									// n1引用n2的内存地址, 不再引用原来的n1内存地址, 这时, n1和n2是同一个对象
        System.out.println(n1==n2);				// n1和n2是同一个对象
        System.out.println(n3==n1); 			// 这时n3和n1不是同一个对象, 因为n1的引用地址已变, n3引用了一个无效地址?不是,是原来n1的地址。
        System.out.println(n3.i);
        System.out.println("(2)n1.i:"+n1.i+"-------->n2.i:"+n2.i);
        n1.i=27;
        System.out.println("(3)n1.i:"+n1.i+"-------->n2.i:"+n2.i);
    }
}

 

 

n3=n1把n1的对象引用地址指向了n3,n3同时获得了对n1和对象的引用地址,n3改变,n1也会改变,在n1=n2时,n1获得了n2的引用句柄,n1引用的对象地址改变, 但n3的引用还是原来n1的引用地址,没有改变。

 

分享到:
评论
1 楼 tobestronger123 2012-07-24  
经典

相关推荐

    java中只有值传递

    Java中传递对象时传递的并不是对象中的内容, 而是对象的地址。

    深入了解为什么Java中只有值传递?

    Java 中只有按值传递的原因是因为 Java 程序设计语言的设计理念。在 Java 中,方法参数的传递方式是按值传递的,而不是按引用传递的。这意味着,当方法接收到参数时,实际上是接收到参数的副本,而不是原始参数本身...

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

    ### Java中的按值传递与按引用传递详解 #### 一、引言 在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点...

    为什么Java只有值传递

    我们先看一下值传递和引用传递的概念和区别 值传递:是指在调用函数时将实际参数复制一份传递到函数中,...我们通过例子理解一下Java的值传递: public static void main(String[] args) { int a = 10; int b = 20;

    Java中函数是值传递还是引用传递?

    有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解  先看一个例子 public class Test1 { public static void main(String[] args) { int a = 10; changeNum(a); System.out.println("main...

    「Java学习+面试指南」部分内容大部分是Java程序员所需要掌握的核心知识

    基础知识点/面试题总结:(必看):Java基础常见知识点&面试题总结(上)Java基础常见知识点&面试题总结(中)Java基础常见知识点&面试题总结(下)重要知识点详解:为什么Java中只有值传递?Java序列化详解泛型&...

    浅谈Java中真的只有值传递么

    Java中的参数传递方式一直以来都是一个讨论的热点,尤其是在学习编程初期,值传递和引用传递的概念可能会引起混淆。本文将深入探讨Java中参数传递的实质,以帮助理解和澄清这一问题。 首先,我们需要理解值传递和...

    【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java ...

    免费开源-【Java学习+面试指南】部分内容大部分是Java程序员所需要掌握的核心知识

    基础知识点/面试题总结:(必看):Java基础常见知识点&面试题总结(上)Java基础常见知识点&面试题总结(中)Java基础常见知识点&面试题总结(下)重要知识点详解:为什么Java中只有值传递?Java序列化详解泛型&...

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识 准备 Java 面试,首选.zip

    为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结 : Java...

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识

    为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java ...

    java中参数传递方式详解

    在 C++ 语言中,这两种传递方式都是合法的,而在 Java 语言中,只有按值传递是一种合法的传递方式。 知识点: * 按值传递和按引用传递是两种不同的参数传递方式 * 按值传递是指函数参数是通过值来传递的 * 按引用...

    java及C++中传值传递、引用传递和指针方式的理解

    总结来说,Java只有值传递,这确保了方法不能直接修改对象,只能通过返回值或全局变量间接影响。C++则提供了值传递、引用传递和指针传递,让程序员可以根据需求选择最适合的方式来操作函数参数。值传递确保了函数的...

    浅议JAVA语言中的参数传递.pdf

    一些书中认为,在 Java 中参数传递都是按值传递的,但是这种说法存在一定的模糊性。本文将对 Java 语言中的参数传递进行详尽的说明。 参数传递是指在方法调用时,传递参数的方式。在 Java 中,参数传递可以分为按值...

    java学习参数传递 杨辉三角,大学java作业题

    在Java中,函数参数的传递方式只有两种,即按值传递(Pass by Value)和按引用传递(Pass by Reference)。实际上,Java中所有的参数传递都是按值传递,这意味着当你将一个变量传递给方法时,方法接收到的是该变量的...

    Java值传递的代码讲解,包含基本类型,引用类型

    这是坑,Java只有值传递,学过C++知道,C++有值传递,引用传递,Java已经摒弃了引用传递,因为我用变量接一下多好,简洁,不花里胡哨。 上代码: package com.qcby.studentManeger; public class Test { public ...

    Java传参方式-值传递还是引用传递

    Java 语言中,参数传递的方式只有一种,那就是按值传递。这意味着无论参数是基本类型还是引用类型,函数或方法在接收到参数时,都只会得到这些值的一个副本,而不是原始值本身。对于基本类型的参数,这个副本就是...

    UI界面之间的值传递

    在iOS开发中,UI界面之间的值传递是应用交互设计中的重要环节。这涉及到不同视图控制器之间数据的流通,确保用户操作的数据能够准确无误地更新到其他界面。本篇文章将详细探讨四种常见的UI界面间值传递方法:Key-...

    Java Lambda可传递匿名函数.pdf

    Java Lambda 表达式是Java 8引入的一个重要特性,它允许程序员以更简洁的方式传递匿名函数。Lambda表达式在处理函数式接口时特别有用,这些接口只有一个抽象方法,如`Comparator`。Lambda表达式的引入使得Java语言...

    java中的引用问题

    对于基本类型,Java采用值传递的方式,而对于引用类型,则是传递引用的副本。 1. 值传递与引用传递的区别: - **值传递**:当传递基本类型参数时,实际传递的是该变量的值的一个拷贝。例如,对于一个布尔值`...

Global site tag (gtag.js) - Google Analytics