Java小白进阶之值传递-引用传递
1 class ClassA{
int value;//成员变量
}
public class TestClassA{
public static void main(String args[]){
int value = 10;//局部变量
changeInt(value);
System.out.println(value);//
ClassA ca = new ClassA();
ca.value = 10;
changeObject(ca);
System.out.println(ca.value);//
}
public static void changeInt(int value){
value++;
}
public static void changeObject(ClassA ca){
ca.value++;
}
}
解释一: 1.Java只有值传递,地址传递也是传递的那个地址值,第一个value++之后是一个新地址,第18行传入value,在里面++之后成为一个新的value,是一个局部变量,而打印语句打印的的是外面的那个value,所以是10; 2.第二个value++是地址传递,地址没有改变,而是把地址指向的值加了1,而外面打印语句仍是这个地址,因为里面的值++了,所以打印出来是11;
解释二:
1.第一个++之后还是10是对的,【基本数据类型对象】被修改之后是一个新地址,不影响原来的【基本数据类型对象】,值传递,value++之后的value是个局部变量,和外面的value无关,value++改的是参数value,改了之后是个局部的value,和外面的value就是两个不同的了,外面的还是外面的,没有被修改,值传递的基本数据类型本身是不会被别人修改的
2.第二个++之后看起来改变了,是因为传入的是一个对象,这个对象里面的成员的值被改变了,但是这个对象本身地址没变,所以看起来像是引用传递,其实还是原来那个对象
Java小白进阶之值传递-引用传递的更多相关文章
- 对象引用 方法传参 值传递 引用传递 易错点 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 【转】java方法参数传递方式--按值传递、引用传递
java的方法参数传递方式有两种,按值传递和引用传递 1.按值传递 参数类型是int,long等基本数据类型(八大基本数据类型),参数传递的过程采用值拷贝的方式 代码片段1: public class ...
- C++之值传递&指针传递&引用传递详解
C++之值传递&指针传递&引用传递详解 目录 C++之值传递&指针传递&引用传递详解 1.函数基础 2.值传递 3.指针传递 4.引用传递 1.函数基础 一个函数由以下 ...
- 理解--->Java中的值传递&引用传递
转自:http://url.cn/5tL9F5D 值传递和引用传递 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际 ...
- java基础之 数据类型 & 值传递 引用传递 & String & 四种引用类型
一.Java数据类型 分为基本数据类型与引用数据类型 基本数据类型: byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0 short:短整型,2个 ...
- Python进阶:值传递,引用传递?不存在的,是赋值传递
Python的变量及其赋值 c/c++/c#/java 里面都有值传递,引用传递的概念,在Python中是如何的? 例 a = 1 b = a print(id(a),id(b)) #14072334 ...
- Java内存分配及值、引用的传递
关于堆栈的内容网上已经有很多资料了,这是我找的加上自己理解的一篇说明文: 一.内存区域类型 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制: 2. 栈:存放基本类型的变量数 ...
- php函数间的参数传递(值传递/引用传递)
php:函数间的参数传递 1.值传递 代码如下: <?php function exam($var1){ $var1++: echo "In Exam:" . $var1 . ...
- c# 值传递 引用传递
以前一直误以为引用类型,在作为参数传递时,都是引用传递(类似于值传递中的ref),也就是说,把引用类型的变量作为参数传递给方法,在方法中修改该参数,会改变这个变量的值, 后来通过一些事例发现,上面的认 ...
随机推荐
- HBase Region重点剖析
Region的概念 Region是HBase数据管理的基本单位.数据的move,数据的balance,数据的split,都是按照region来进行操作的. region中存储这用户的真实数据,而为了管 ...
- 设计模式-解释器模式(Interpreter)
解释器模式是行为型模式的一种.给定一个语言(如由abcdef六个字符组成的字符串集合),定义它的文法的一种表示(S::=abA*ef,A::=cd)并定义一个解释器,解释器使用该表示来解释语言中的句子 ...
- springboot配置文件外置处理
前言: 在springboot项目中,一般的配置文件都在resource/config下面,它可以以两种方式存在,一种是yml,一种是properties方式. 当运维和开发分开的时候,比如连接mys ...
- centos下安装色彩scrapy
一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...
- Char.Js 学习使用
<script src="../js/Chart.js"></script> <div " style="float:left;& ...
- NET多线程之进程间同步锁Mutex
Mutex类似于lock.Monitor,都是为了解决多线程环境下,资源竞争导致的访问顺序问题.常见资源竞争有以下情况: 1.单例,如何确保单例: 2.IO文件操作,如果同时又多个线程访问同一个文件会 ...
- 【题解】P2916 [USACO08NOV]安慰奶牛Cheering up the Cow-C++
原题传送门 这道题用最小生成树来完成,我选用的是kruskal(克鲁斯卡尔)来完成.这道题目在克鲁斯卡尔模板的基础上,有变动的地方只有2处:1.因为必须从一个点出发,而最小生成树最后会让所有点都连通, ...
- 【弱化版】【P3371 【模板】单源最短路径(弱化版)】-C++
→原题传送门← 看到题目描述我就知道,这道题不能用SPFA[手动补滑稽] 那么我这道题目采用的是dijkstra算法不了解的去补一下知识哈. dij的模板: #include<bits/stdc ...
- redis集群(单机6节点实现)
Redis集群搭建与简单使用 1.介绍安装环境与版本: 1)Redis使用的是Redis-3.2.8版本. 2)用一台虚拟机模拟6个节点,三个master节点,三个slave节点.虚拟机使用CentO ...
- 请问 imgbtn上怎样添加文字呢
陈桂城(49868971) 2013/10/14 21:29:57 <imgbtn>文字</imgbtn>