Java基础 按数值传递
来源:互联网 发布:仿淘宝省市地区级联 编辑:程序博客网 时间:2024/06/13 12:49
总论
Java是按数值传递(call by value), 不论是原始型(primitive type),还是引用数据类型 (reference type)。本文中的引用数据类型举了两例子:String型与数组型。在Java中,String型是一种对象类(Class),即是一种引用数据类型,但它是Immutable(不可变更)。
这里附带讲下Java中的引用数据类型包含哪些子类?
引用数据类型:
1.对象类 (Class)
2.接口 (Interface)
3.数组 ([])
痛点:
对于引用数据类型,按值传递的这个说法 的理解 应为:复制了该对象的引用(reference),然后传入到函数参数中。所以您会发现,
数组型的话,将数组作为参数传入
1. 如在方法中把这个传入的引用指向别的引用,原数组不会被作用到;
2. 如在方法中修改数组中的某个值,是会作用到原数组的。
3. 上述两点如不太明白,除看下列代码片段外,还可看看本文附图。
原始型例子
String型例子
数组型例子
方便起见,把试图改变这三种类型的变量的方法都写在同一个代码片段里,供读者参考:
代码片段
class myCode{ static void setNewInt(int i) { i = i + 33; } static void setNewString(String str) { str += "cool!"; } static void setNewArray(int[] arr1) { int[] b = {1, 2}; arr1 = b; } static void setNewArrayElement(int[] arr2) { arr2[0] = 105; } public static void main (String[] args) throws java.lang.Exception { int i = -33; String str = "I am "; int[] arr1 = {-4, -3}; int[] arr2 = {-19, 84}; /* Original Output ... */ System.out.print(String.format("int i is %d, String s is %s", i , str)); System.out.print(" and arr1[0], arr1[1] is: " + arr1[0] + ", " + arr1[1]); System.out.println(" and arr2[0] is: " + arr2[0]); /* Start Setting process... */ setNewInt(i); setNewString(str); setNewArray(arr1); setNewArrayElement(arr2); /* New Output ... */ System.out.print(String.format("Now: int i is %d, String s is %s", i , str)); System.out.print(" and arr1[0], arr1[1] is: " + arr1[0] + ", " + arr1[1]); System.out.println(" and arr2[0] is: " + arr2[0]); }}
您认为运行结果会是怎样?
按照法则:Java是按数值传递,作用于原始型(primitive type)和String型,那么变量 i与str 的值是不会改变的。
而对于数组型,我这里就不多写了,请大家看附图。
运行结果
int i is -33, String s is I am and arr1[0], arr1[1] is: -4, -3 and arr2[0] is: -19Now: int i is -33, String s is I am and arr1[0], arr1[1] is: -4, -3 and arr2[0] is: 105
附图
更多阅读
- Java String类
- JavaScript is call by sharing
改进意见
欢迎在评论中留下您对此博文的改进意见,谢谢您
阅读全文
0 0
- Java基础 按数值传递
- iOS开发基础 - 数值传递
- java基础之大数值
- java基础 传递参数
- Java基础-参数传递
- java基础 值传递
- C++ 参数按数值传递和按地址传递
- 函数参数按数值传递和按地址传递
- Java基础小结(数值类型转换规则)
- java基础--数值的扩容实例应用
- Java基础[3]字符串,大数值,数组
- java基础之int数值溢出
- Java基础-值传递与地址传递
- 14.Java 基础 - 参数传递
- Java基础-参数传递问题
- JAVA基础--参数传递问题
- java基础之方法传递
- 【Java基础】Java:按值传递还是按引用传递详细解说
- PAT a1090题解
- PAT a1091题解
- PAT a1092题解
- p5.js入门教程(3) 平滑过渡(Easing)
- 关于freertos的heap1
- Java基础 按数值传递
- RecyclerView方法onCreateViewHolder()和onBindViewHolder()没有调用
- 失去的时候才发现其珍贵,人没有目标是最可怕的
- Mac下安装和使用brew
- win10系统修改hosts文件无法保存
- linux学习之旅(七)&& 进程间通信之信号
- BZOJ 4552 [Tjoi2016&Heoi2016]排序
- JavaScript正则表达式
- 深度学习、自然语言处理和表征方法