`
dyllove98
  • 浏览: 1404295 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39007
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:79974
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133093
社区版块
存档分类
最新评论

java 中传值 * 传引用

 
阅读更多

(一)基本数据类型:传值,方法不会改变实参的值。

package com.jhl;

public class TestFun {
public static void testInt(int i){
i=5;
}
public static void main(String[] args) {
int a=0 ;
TestFun.testInt(a);
System.out.println("a="+a);
}
}

--打印结果:a=0

(二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。

  举两个例子:

  (1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。

package com.jhl;

public class Demo {

public void changeStr(String str){
str="jhl"; //形参引用指向字符串"jhl"
}

public static void main(String[] args){

String str="jihi";
new Demo().changeStr(str);
System.out.println(str); //实参引用未改变,值也没变
}

}

--打印结果:jihi

(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

package com.jhl;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Test {

public void a(Map a, String b) {
a.put("test", b);

}

public void b() {
Map a = new HashMap();
a.put("test", "a");
String b = "b";
printMap(a);---- key:test value:a
a(a, b); //改变了实参的内容
printMap(a);---- key:test value:b
}

public <K, V> void printMap(Map a) {
Set set = a.entrySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Map.Entry<K, V> e = (Map.Entry<K, V>) it.next();
System.out.println("key:" + e.getKey() + " value:" + e.getValue());

}

}

public static void main(String[] args) {

Test t = new Test();
t.b();

}
}

--打印结果:

key:test value:a

key:test value:b

(3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer :

public class TestFun {
public static void testStringBuffer(StringBuffer sb){

sb.append("java");//改变了实参的内容
}
  public static void main(String[] args) {
  StringBuffer sb= new StringBuffer("my ");

new TestFun().testStringBuffer(sb);
System.out.println("sb="+sb.toString());//内容变化了
}
}

--打印结果:sb=my java

所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了

总结:

  第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

  第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

  第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容

 

0
0
分享到:
评论

相关推荐

    java中传值与传引用

    在Java编程语言中,函数调用时的参数传递方式有两种:传值(Passing by Value)和传引用(Passing by Reference)。虽然Java官方文档中并未明确指出有传引用这一概念,但在实际操作中,Java的行为类似于传引用,尤其...

    java中传值还是传引用的的认识

    "java中传值还是传引用的认识" Java 中的参数传递是值传递还是引用传递?这是一个经常引发讨论的问题。在 Java 中,参数传递是按值传递的,也就是说,传递给方法的参数是一个副本,而不是原始值本身。 当一个对象...

    JAVA中传值与引用问题

    本文将深入探讨Java中的传值与传引用问题,并通过具体的例子来解析其中的原理。 #### 二、基础知识回顾 在Java中,所有的数据类型可以分为两大类:基本类型(如int, double等)和引用类型(如Object, String等)。...

    java的传值与传值后的改变

    理解Java中的传值与传引用对于编写正确且预期的行为代码至关重要。在编写函数时,应清楚地知道参数如何被传递,以及这将如何影响函数的可读性和行为。在实际编程中,合理运用这些知识能帮助避免许多常见的错误和困惑...

    Java是传值还是传址引用

    ### Java是传值还是传址引用 #### 一、简单类型是按值传递的 Java在处理简单数据类型(如int、boolean等)时采用的是按值传递的方式。这意味着当你将一个简单类型的值作为参数传递给一个方法时,实际上传递的是这...

    JAVA传值与传引用[整理].pdf

    JAVA传值与传引用[整理].pdf

    JSP中java代码与js之间的传值

    - **通过JSP表达式语言(EL)**:使用EL表达式,如 `${javaVariable}`,可以直接在JavaScript代码中引用JavaBean或作用域内的变量。 2. **JavaScript到Java的传值**: - **表单提交**:通过JavaScript修改表单字段的...

    引用类型传值方法

    本篇文章将详细探讨引用类型的传值方式。 首先,理解引用类型的概念至关重要。引用类型包括类(classes)、接口(interfaces)、数组以及委托(delegates),它们在内存中的存储方式与值类型截然不同。对于引用类型...

    Java中的传值与传引用实现过程解析

    "Java中的传值与传引用实现过程解析" Java中的传值与传引用是Java编程语言中的一种基础概念,它们是Java函数中参数传递的两种方式。 Java中的传值是指函数参数的值被复制到函数内部,在函数内部对参数的修改不会...

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

    ### Java及C++中传值传递、引用传递和指针方式的理解 在程序设计语言中,函数调用时参数的传递方式对理解程序的行为至关重要。本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用...

    浅析Java方法传值和传引用问题

    在Java编程语言中,方法参数传递机制涉及到两个主要概念:传值和传引用。了解这两个概念对于编写高效、可靠的代码至关重要。本篇文章将深入探讨Java中的方法传值和传引用问题。 首先,让我们理解什么是传值。在Java...

    Java传值还是引用

    根据标题和描述,我们将深入探讨Java中传值与引用的区别,以及它们在实际编程中的应用。 首先,Java是一种“总是按值传递”的语言。这意味着无论是基本类型还是引用类型,当作为参数传递时,都会有一个副本被创建并...

    Java中参数传值的代码清单.pdf

    Java只支持两种类型的参数传递:基本数据类型(如int、double等)的传值和引用类型(如类对象)的传值。以下是对给定代码清单的详细解释: 1. **基本数据类型传值**: 在Java中,基本数据类型的参数传递是按值传递...

    23.Java对象作为参数传递是传值还是传引用1

    首先,我们需要理解Java中的引用概念。当创建一个对象,如`StringBuffer sb = new StringBuffer("Hello ");`,我们实际上是创建了一个新的对象,并为变量`sb`分配了一个内存地址,这个地址指向了新创建的对象。这个...

    传值传名传地址.zip

    例如,在C++或Java等语言中,基本类型的参数传递就是传值。这种机制保证了函数内部的修改不会对外部环境产生副作用,但同时也意味着无法直接通过形参改变实参的值。 其次,**传名**(也称为传引用)的概念。在某些...

    Java-Java面向对象中引用传递教程

    - **传引用**:对于对象,Java总是采用引用传递。这意味着,即使在方法中改变对象的属性,方法外部的变量也会看到这些变化,因为它们都引用同一个对象。 2. **对象的创建与引用** - 使用`new`关键字创建一个对象...

    Java到底是传引用还是传值Java开发Java经验技巧共

    在Java中,基本数据类型(如int、float、char等)是按值传递的,而对象则是按引用传递的。但这并不意味着对象本身被复制,而是对象的引用被复制。 首先,我们来看基本类型的参数传递。当一个基本类型的变量作为参数...

    分析java的传值问题

    ### 分析Java中的传值问题 在Java编程语言中,函数调用时参数传递的方式是理解程序行为的关键之一。本文将深入探讨Java中基本类型与引用类型的数据传递机制,并通过具体的示例代码来阐述这两者之间的区别。 #### ...

Global site tag (gtag.js) - Google Analytics