【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) : 在参数传递过程中,形参和实参占用了两个完全不同的内存空间.形参所存储的内容是实参存储内容的一份拷贝. ...
随机推荐
- Node.js安全清单
前言 安全性,总是一个不可忽视的问题.许多人都承认这点,但是却很少有人真的认真地对待它.所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查. 以下列出的安全项, ...
- ccf 201803-4 棋局评估 (对抗搜索)
棋局评估 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列 ...
- angular的directive指令的link方法
比如 指令标签 <mylink myLoad="try()"></mylink> link:function(scope,element,attr){ el ...
- RPC与REST
RPC与REST (摘自网络,个人理解)
- js match 来点击切换图片
定义和用法 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. 该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置. ...
- 4星|《OKR实践指南》:老司机经验谈
OKR 实践指南:知乎任向晖.雷明灿作品 (知乎「一小时」系列) 作者所在的公司已经实施了OKR十个季度了.算是目前少有的OKR老司机.书中介绍的是作者的实践经验,在目前的OKR中文书中这本算是比较少 ...
- java Web(3)
Servlet 是运行在Web服务器或应用服务器上的Java程序 在Web上创建动态内容的有效而强大的解决方案 由容器来管理生命周期与Web服务器交互 由Sun规范了其功能 Servlet部署: 一个 ...
- DNN:windows使用 YOLO V1,V2
本文有修改,如有疑问,请移步原文. 原文链接: YOLO v1之总结篇(linux+windows) 此外: YOLO-V2总结篇 Yolo9000的改进还是非常大的 由于原版的官方YOLOv ...
- Object.assign和序列/反序列
Object.assign let testObj = { a:[1,2,4], b:{ name:'ls', school:['huf','yelu'], parent:{ father:'lili ...
- HDU 2268 How To Use The Car (数学题)
题目 //做起来很艰辛,总结起来很简单... //注意步行速度可能比车的速度快.... //推公式要仔细,,,, //一道对我来说很搞脑子的数学题,,,,, //车先送第一个人上路,第二个人步行:中途 ...