【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) : 在参数传递过程中,形参和实参占用了两个完全不同的内存空间.形参所存储的内容是实参存储内容的一份拷贝. ...
随机推荐
- A simple problem(并查集判环)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2497 题意:给定一些点和边的关系,判断S点是否 ...
- A - Team
Problem description One day three best friends Petya, Vasya and Tonya decided to form a team and tak ...
- # --with-http_stub_status_module模块
作用: 查看nginx的客户端状态 环境检测 nginx -V 查看nginx已经编译的模块中是否包含--with-http_stub_status_module 语法: 效果
- Android之通过配置Flavor实现一个项目打包成多个apk
最近我老大问我一个问题,说Android可不可以像iOS那样,通过target对项目进行管理啊.老大提这个问题也是正常的,我公司的主要是帮别的公司做硬件定制的,每定制一个硬件就要定制一个APP,但是很 ...
- javascript中计算点击多少次
点击事件:onclick <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- for 循环练习题(2)
一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 var x=0.0001; for(var a=1;true;a++){ x=x*2; if (x>8848) { ...
- Caffe: gflag编译出现问题汇总
1. 使用Unicode字符集: 出现问题 E:\CodeBase\ML\Caffe\ThirdPartySrc\gflags-master\src\gflags.cc(1340): error C2 ...
- SLAM:使用G2O-ORB-SLAM(编译)
前言: 没有新雪,看看自己所做的事情,有没有前人做过.果然,EKF_SLAM的版本出现了Android版本的OpenEKFMonoSLAM, G2O-ORB SLAM也出现了VS2012版本. 一.S ...
- AS3.0+PHP写入mySQL
php中$_POST变量是一个数组,用于收集来自method="post"的值,内容是有HTTP POST方法发送的变量名称和值. 从带有POST方法的表单发送的信息,对任何人都是 ...
- NET MVC FileResult 导出/下载 文件/Excel
参考http://www.cnblogs.com/ldp615/archive/2010/09/17/asp-net-mvc-file-result.html 1.引入NPOI 2.代码 using ...