java 关于值引用、地址引用的问题
8种基本引用类型
四种整数类型(byte、short、int、long)
两种浮点数类型(float、double)
一种字符类型(char)
一种布尔类型(boolean)
以及如String, final类型的数据类型时。
在方法调用时,属于值传递,在方法中改变了值之后,原始值不会改变。
除了以上之外的数据类型,如自定义的对象,Map,List之类的引用,都是地址引用。
如下demo:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* @author liyuechao *
* @since:2017年8月10日 下午5:12:07
*/
public class Test {
public static void main(String[] args) {
List<A> list = new ArrayList<>();
A a = new A();
a.setName("a");
A b = new A();
b.setName("b");
list.add(a);
list.add(b);
Map<String, List<A>> map = new HashMap();
map.put("ha", list);
// null的时候不会改变,因为没有具体的指向地址
map.put("he", null);
List<A> lista = map.get("ha");
List<A> listc = map.get("ha"); List<A> listd = map.get("he"); for (A a2 : lista) {
modi(a2);
}
setValue(listd); List<A> listb = map.get("ha"); for (A a2 : listb) {
System.out.println(a2.getName());
} for (A a2 : listc) {
System.out.println(a2.getName());
}
for (A a2 : listd) {
System.out.println(a2.getName());
}
} public static void modi(A a) {
a.setName("x");
} public static void setValue(List<A> list) {
if (list == null)
list = new ArrayList<>();
A a = new A();
a.setName("y");
list.add(a);
} } /**
* @author liyuechao *
* @since:2017年8月10日 下午5:12:31
*/
public class A
{
private String name; public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
}
}
运行结果:
java 关于值引用、地址引用的问题的更多相关文章
- Java是值传递还是引用传递?
Java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题.这个问题一般是相对函数而言的,也就是Java中所说的方法参数,那么我们先来回顾一下在程序设计语言中有关参数传递给方法的两 ...
- 数据存储在哪里? Java是值传递还是引用传递?
寄存器 : 最快的存储区,位于处理器中,寄存器会按需求自行分配空间,java不能控制寄存器,所以在程序中感觉不到它的存在 栈(stack) : 位于RAM(内存)中,速度仅次于寄存器,存储对象的引用( ...
- java是值传递还是引用传递
首先写一个简便的Employee,以便测试使用. class Employee { private String name; public Employee(String name) { this.n ...
- java中值传递和引用传递
最近工作中使用到了值传递和引用传递,但是有点懵,现在看了下面的文章后清晰多了.一下是文章(网摘) 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...
- java的值传递和引用传递
昨天博主在对于值传递和引用传递这里栽了一个大坑啊,导致一下午时间都浪费在这里,我们先说下值传递和引用传递java官方解释: 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对 ...
- Does Java pass by reference or pass by value?(Java是值传递还是引用传递) - 总结
这个话题一直是Java程序员的一个热议话题,争论不断,但是不论是你百度搜也好还是去看官方的文档中所标明的也好,得到的都只有一个结论:Java只有值传递. 在这里就不贴代码细致解释了,让我们来看看一些论 ...
- Java中值传递和引用传递的区别
在Java中参数的传递主要有两种:值传递和参数传递: 下面是对两种传递方式在内存上的分析: 一:值传递 解释:实参传递给形参的是值 形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参 ...
- 堆栈详解 + 彻底理解Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...
- 关于java是值传递还是引用传递
一.概念 实际上对这两种传递方式,知乎上有个回答说得很好: 值传递和引用传递,属于函数调用时参数的求值策略(Evaluation Strategy),这是对调用函数时,求值和传值的方式的描述,而非传递 ...
- 【java】值传递和引用传递---对象作为方法的参数传入属于哪种传递
首先 这篇作为一个永久性的问题,欢迎大家讨论 其次,个人结论如下几条: ①Java有且只有一种传递,即 值传递 ②作为方法的参数传入,都是对原本的实参进行了copy ③只不过[实参]若是[基本数据类型 ...
随机推荐
- [leetcode-914-X of a Kind in a Deck of Cards]
In a deck of cards, each card has an integer written on it. Return true if and only if you can choos ...
- 设计 Azure SQL 数据库,并使用 C# 和 ADO.NET 进行连接
标题:设计 Azure SQL 数据库,并使用 C# 和 ADO.NET 进行连接 里面有使用C#使用SqlServer的例子.
- MySQL 事物机制
前言:事物:一组原子性的SQL查询,或多个SQL语句组成了一个独立的单元.要么这一组SQL语句全部执行,要么全部不执行 (一)事物日志介绍:管理事物机制的日志 redo日志:记录SQL执行的语句,这些 ...
- 写在SVM之前——凸优化与对偶问题
SVM之问题形式化 SVM之对偶问题 SVM之核函数 SVM之解决线性不可分 >>>写在SVM之前——凸优化与对偶问题 本篇是写在SVM之前的关于优化问题的一点知识,在SVM中会用到 ...
- EasyUI中DataGrid构建复合表头
在使用easyui的DataGrid控件时,构建复合表头就显得非常简单了.只需要在使用columns属性时通过数组的方式编写列名即可.如我们需要构建成一个如下的表头: Columns的代码如下: co ...
- libmnl
https://www.netfilter.org/projects/libmnl/doxygen/modules.html 1,tar xvf libmnl-1.0.4.tar.gz 2,cd li ...
- pip使用国内镜像源
windows版 1.在windows文件管理器中,输入 %APPDATA% 2.在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件 3.在新建的pip.ini文件中输入以下 ...
- Mac & how to uninstall LANDesk
Mac & how to uninstall LANDesk http://eddiejackson.net/wp/?p=9036 https://community.ivanti.com/d ...
- DNS原理及解析过程
本文主要参考自:http://369369.blog.51cto.com/319630/812889 并做了小幅修改 什么是DNS? 因特网上的主机和人类一样,也可以使用多种方式进行识别.主机的一种识 ...
- 使用JMeter录制Web应用测试脚本
环境 操作系统:Windows 7 工具:JMeter.Badboy 1. 使用代理录制Web性能测试脚本 使用代理录制脚本来创建测试计划无疑是一个简便的方法,代理所要完成的工作就是录制发往服务器的请 ...