Map<String, Object> map = new HashMap<String, Object>();
Map<String, String> params = new HashMap<String, String>();
map.put("params", params);
params.put("key", key);
Map的put不是put一个对象,而是put一个对象的引用!该对象更新后,Map里面被put的引用随着改变。
对于String,我用代码测试了一下:
String a = new String("111");
String b = a;
a = "222";
System.out.println(b);//结果是111
System.out.println(b.equals(a));//false
测试结果是b仍然为111。
String b = a;表示a和b指向同一个字符串"111"的引用。
a = "222";表示把a改变为指向"222"的应用,而此时b保持不变。
再看Sting数组
String a[] = { "1","2","3" },
String b[] = null;
b = a;
a[0] = "4";
System.out.println(b[0]); //结果是4
System.out.println(b.equals(a));//true
此时输出的又是4!这个跟上面的Map类似。
此时在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),这时候b与a指向同一个内存地址,即同一个对象(数组),改变数组a的值的时候,也就相当于改变了b的值。
引用
Java对对象和基本的数据类型的处理是不一样的。和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。这种方式的参数传递被称为"值传递"。
而在Java中用对象的作为入口参数的传递则缺省为"引用传递",也就是说仅仅传递了对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的。当函数体内部对输入变量改变时,实质上就是在对这个对象的直接操作。
除了在函数传值的时候是"引用传递",在任何用"="向对象变量赋值的时候都是"引用传递"。
分享到:
相关推荐
Java 60 道面试题及答案 本文将对 Java 相关知识点进行详细的解释和总结,从 Java 的基本概念到高级主题,涵盖面试中常见的知识点。 Java 基础知识 ...Java 中是值传递的,但是对象的引用是传递的。
在Java中实现行转列,通常涉及数据结构的转换,如从List<List<String>>转换为List<String>,或者更复杂地,从Map<String, Object>到自定义对象的集合。以下是一些关键知识点: 1. 数据结构理解: - **List**: Java...
参数传递时,Java 采用值传递,但对象引用是按值传递的,这意味着函数内部对对象的修改会影响到原始对象。 四、关键字 final 用于声明不可变的变量、方法或类。static 关键字用于声明类级别的变量和方法,它们属于...
5. **方法引用**:方法引用是与lambda表达式相关的一个特性,它可以将现有方法或构造器引用作为函数对象,如`Arrays::sort`或`String::length`。 6. **日期和时间API**:Java 8对日期和时间处理进行了重大改进,...
在传统的 Java 代码中,我们通常需要在调用可能存在 null 值的方法或字段前进行 null 检查,如上述例子中对 computer、soundcard 和 usb 的多次检查。这种方式虽然可以避免空指针异常,但会使代码变得冗长且不易阅读...
`java.lang`包含所有Java程序都默认导入的基本类型和对象,如`String`、`Integer`、`Object`等。`java.io`提供了输入/输出流处理,用于数据的读写。`java.util`包含各种实用工具类,如集合框架、日期时间处理、事件...
当一个对象被当作参数传递到一个方法后,此方法可以改变这个对象的属性,并可以返回变化后的结果,那么这里到底是值传递还是引用传递?答案是引用传递。 switch 语句可以作用在 byte、short、char、int 上,但不能...
虽然Java没有传统意义上的指针,但在底层实现中仍然使用类似指针的概念来引用对象。这种指针对程序员是不可见的,由JVM管理和操作。 #### 二十三、值传递与引用传递 Java中实际上采用的是引用传递的方式。对于基本...
3. **HashMap存储函数引用**: 在JavaDelegateTest项目中,开发者可能会创建一个`HashMap`,其中键是某种标识(可能是字符串或其他对象),值是函数接口实例,表示实际的方法。例如,使用`Function`接口: ```java ...
Java 8引入了 Lambda 表达式,这是一种简洁的匿名函数表示方式,使得函数可以像对象一样被传递和处理。Lambda表达式简化了回调函数的编写,提高了代码的可读性和可维护性。例如,`List<String> names = Arrays....
Java是一种广泛使用的编程...参数传递通常是值传递,但对象引用是按引用传递。 以上是Java面试中常见的知识点,涵盖了从基础概念到高级特性的多个方面。理解和掌握这些知识点对于成为一名优秀的Java开发者至关重要。
- Java 中对象参数的传递实际上是引用传递,即传递的是对象的引用而不是对象本身。这意味着如果修改了对象的属性,原始对象也会受到影响。 #### 31. switch 是否能作用在 byte 上,是否能作用 - **switch** 支持 ...
Java中的继承是一种类与类之间传递属性和行为的方式。子类继承父类后可以获得父类的所有非私有属性和方法。 - 子类默认是父类的子类。 - 构造器不被继承,但子类可以通过`super()`显式调用父类的构造器。 - 属性是...
Java面试题及答案-共60道 本文将对 Java 面试题中的知识点进行详细解释和总结。 一、架构模式 B/S 架构即浏览器/服务器架构,主要应用于 Web 应用程序开发。...Java 中采用的是值传递引用的方式。
- `Optional<T>`类用于表示可能为null的对象引用,帮助开发者避免空指针异常。它提供了一种安全的方式来处理可能缺失的值。 4. **默认方法**: - 接口中可以定义带有实现的默认方法,这允许在不破坏向后兼容性的...
其中,`Optional`类是Java 8引入的新特性,用于表示可能为`null`的值,以避免空指针异常。 2. **集合框架**:Java 1.8对集合框架进行了优化,引入了流(Stream)API。流允许对集合进行声明式、函数式的处理,支持...
Java 8 API 文档是Java开发人员的重要参考资料,它详细阐述了Java 8及更高版本中的各种类库、接口和方法。这个文档包含了Java SE(标准版)8的所有公共API,是理解和使用新特性的关键工具。让我们深入探讨Java 8 API...
在Java中,引用类型的值传递实际上是引用的传递。当你将一个引用类型作为参数传递给方法时,实际上传递的是指向该对象的引用,而不是对象本身。这意味着,如果在方法内部修改了对象的状态,这种修改会影响到原始对象...
第4章 面向对象(封装) 4课时 理解类封装属性(数据成员)和行为(方法成员),区别类和对象。 能够定义类,创建类的对象(实例化类)和通过对象引用访问数据成员和方法成员;形成定义类和使用类...
5. **Optional类**:Java 8的`Optional<T>`类用于处理可能缺失的值,防止空指针异常。在处理文本数据时,LangChain可能用`Optional`来表示某些可能不存在的结果,提高代码的健壮性。 6. **日期和时间API**:在处理...