【Java】基本类型和引用类型(值传递)
【关键词】
【问题】
· 加深对基本类型和引用类型的理解;
【效果图】
【分析】
- 參见最后的
【參考资料】【解决方式】
【代码】
public void test() throws Exception {System.out.println("\nint:=================");int i = 2;System.out.println("before:" + i);change1(i);System.out.println("after:" + i);System.out.println("\nInteger:=================");Integer integer = 3;System.out.println("before:" + integer);change2(integer);System.out.println("after:" + integer);System.out.println("\nString:=================");String str = new String("xxx");System.out.println("before:" + str);change3(str);System.out.println("after:" + str);System.out.println("\nString[]:=================");String[] array = new String[]{"a", "b", "c"};System.out.println("before:" + array[0]);change4(array);System.out.println("after:" + array[0]);System.out.println("\nBook:=================");Book book = new Book("book1");System.out.println("before:" + book.name);change5(book);System.out.println("after:" + book.name);System.out.println("\nint[]:=================");int[] int_array = new int[]{1, 2, 3};System.out.println("before:" + int_array[0]);change6(int_array);System.out.println("after:" + int_array[0]);}public void change1(int i) {i = 4;}public void change2(Integer integer) {integer = (Integer) 8;}public void change3(String str) {str = new String("yyy");}private void change4(String[] array) {array[0] = "A";}private void change5(Book book) {book.name = "book2";}private void change6(int[] int_array) {int_array[0] = 10;}private class Book {public String name;Book(String name) {this.name = name;}}
【參考资料】
java究竟是值传递还是引用传递?
(当中“三:调用方法时发生了什么?”讲的非常清晰)
java 中 Integer 传參方式的问题,不是说Integer是引用传递么?但为什么不会改变it


String 和 Integer 传递给方法时究竟是不是传递引用??!
!
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html
When the argument is of reference type, pass-by-value means that the method cannot change the object reference, but can invoke the object's methods and modify the accessible variables within the object.
当參数是引用类型时。你能通过调用该引用所指向的对象本身的方法来改变对象自身,可是。你并不能改变该引用。(你改变的仅仅能是引用所指向的对象,而不是引用。所以,仍然是值传递。)
-
无论你传的是什么,传过去的都仅仅是一个副本而已,这个副本作为方法的局部变量保存在栈中。
假设传的是基本数据类型,改动这个值并不会影响作为參数传进来的那个变量,由于你改动的是方法的局部变量,是一个副本。
假设传的是一个对象的引用,也是一样的,也是一个副本,可是这个副本和作为參数传进来的那个引用指向的是内存中的同一个对象,所以你通过这个副本也能够操作那个对象。可是假设你改动这个引用本身,比方让他指向内存中的另外一个对象,原来作为參数传进来的那个引用不会受到影响。
我认为弄明确这些即可了,说值传递或引用传递都无所谓,可是说值传递更适合一些,这个值能够是引用也能够是基本数据类型。
【Java】基本类型和引用类型(值传递)的更多相关文章
- Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...
- Java基本类型和引用类型
8种基本类型 一.4种整型 byte 1字节 -128--127 short 2 字节 -32,768 -- 32,767 ...
- 《JavaScript高级程序设计》读书笔记 ---基本类型和引用类型的值
变量.作用域和内存问题 基本类型和引用类型的值ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.在 ...
- Java 基础 - 基本类型和引用类型
ref: https://www.cnblogs.com/ysocean/p/8482979.html#_label2 ------------------ 这里再给大家普及一个概念,在 Java 中 ...
- 基本类型和引用类型的值 [重温JavaScript基础(一)]
前言: JavaScript 的变量与其他语言的变量有很大区别.JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类 ...
- 《JS高程》基本类型和引用类型的值学习笔记
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 创建方式类似:创建一个变量并为其赋值. (1)基本类型值和引用类型值比较 基本类型值 引用类型值 简单的数据段 可能由 ...
- JS基本类型和引用类型的值
JS中可以把变量分成两部分,基本类型和引用类型. 基本类型比较简单,包括:Undefined.Null.Boolean.Number和String,基本类型值就是简单的数据段:引用类型值可能由多个值构 ...
- Java中真的只有值传递么?
Java中真的只有值传递么? (本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨) 回顾值传递和引用传递 关于Java是值传递还是引用传递,网上有不一样的说法. 1.基本类型或基本类型 ...
- Java的参数传递是值传递?
引用传递和值传递的区别.(不先说定义的都是在耍流氓!) 按值调用(call by value) : 在参数传递过程中,形参和实参占用了两个完全不同的内存空间.形参所存储的内容是实参存储内容的一份拷贝. ...
随机推荐
- (Go)10.流程控制示例
package main import ( "math/rand" "fmt" ) func main() { //var n int n := rand.In ...
- Genesis 多边形闭轮廓填充算法
通过逐行扫描,计算得出直线与多边形相交点进行求解 原理图形如下所示: 相关函数: /// <summary> /// 求点P到线段L距离 /// </summary> /// ...
- selenium3 + python - select定位
一.Select模块(index) 1.导入Select模块.直接根据属性或索引定位 2.先要导入select方法:from selenium.webdriver.support.se ...
- JavaScript中的+= 是什么?
+=表示相加并赋值,“i+=5”与“i=i+5”是等效的. 类似的运算符还有-=,*=,/=. i-=5等价于i=i-5; i*=5等价于i=i*5: i/=5等价于i=i/5.
- 基于Myeclipse+Axis2的WebService开发实录
最近开始学习了下在Myeclipse开发工具下基于WebSerivce的开发,下面将相关相关关键信息予以记录 Myeclipse的安装,本文以Myeclipse2014-blue为开发环境,相关配置执 ...
- 【LuoguP2210 USACO】 Haywire
这种答案跟序列排列顺序有关的,n比较小的(稍微大一点的也可以),求最优解的,一般都可以随机化过 随机化不一定是模拟退火或是什么遗传蚁群 哪怕只是直接随机化一个序列,只要你随机的次数够多,它都能找到正解 ...
- cookie/session在nodes中的实战
cookie 和 session 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 比如在淘宝的某个 ...
- PHP开发笔记(三)关于PHP伪静态的问题总结
Apache 第一个问题就是关于PHPStudy集成Apache环境下5.5版本以上”No input file specified“问题. 针对TP5框架,以下是.htaccess文件的配置,PHP ...
- (转) 前端模块化:CommonJS,AMD,CMD,ES6
模块化的开发方式可以提高代码复用率,方便进行代码的管理.通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数.目前流行的js模块化规范有CommonJS.AMD.CMD以及ES6的模块 ...
- Mongo连接远程数据库
mongo IP+Port CrabyterV5 首先这么操作是基于配置了环境变量的,可以参照http://www.cnblogs.com/daiyonghui/p/5209076.html mong ...