博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java——参数传递
阅读量:4565 次
发布时间:2019-06-08

本文共 1640 字,大约阅读时间需要 5 分钟。

 写这篇文章时,其实还是不理解Java中的参数传递只有传值没有传址(传引用)。这里引用知乎上大神的讲解来记录一下。

一、基本类型和引用类型

1 int num = 10;2 String str = "hello";

                 

num是基本类型,num的值直接保存在变量中,变量保存在哪里呢?

str是引用类型,变量中保存的是实际对象的地址,这种变量为“引用”,引用指向实际对象,实际对象中保存着内容。

二、赋值运算符(=)

1 num = 20;2 str = "java";

                    

赋值操作有两个含义:

1)放弃原有的值或引用

2)得到=右侧变量的值或者引用

 基本类型num,赋值运算符会直接改变变量的值,原值被覆盖

引用类型str,赋值运算符会改变引用中保存的地址,原来的地址被覆盖掉,但是原来的对象不会被改变。比如,"hello"字符串对象没有被改变,如果没有被任何引用指向,该字符串对象就会被视为垃圾,就会被垃圾回收器回收。

三、调用方法的过程

参数传递基本上就是赋值操作

1基本类型:

1 void foo(int value)2 {3          value = 100;4 }5 foo(num);//num没有被改变

2未提供改变自身方法的引用类型:

1 void foo(String text)2 {3        text = "windows";4 }5 foo(str); //str也没有被改变

3提供了改变自身方法的引用类型

1 StringBuilder sb = new StringBuilder("iphone");2 void foo(StringBuilder builder)3 {4       builder.append("4");5 }6 foo(sb); //sb被改变了,变成了“iphone4”

4提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符

1 StringBuilder sb = new StringBuilder("iphone");2 void foo(StringBuilder builder)3 {4      builder = new StringBuilder("ipad");5 }6 foo(sb);//sb没有被改变,还是"iphone"

3 4示例理解:

3图解:

 

 

 

 

4图解:

测试示例:

1 class Employee 2 { 3     public int age; 4 } 5 public class Main 6 { 7     public static void changeEmployee(Employee employeeY) 8     { 9 //        employeeY = new Employee();10         employeeY.age = 1000;11     }12     public static  void main(String[] args)13     {14         Employee employee = new Employee();15         employee.age = 100;16         System.out.println(employee.age);17         changeEmployee(employee);18         System.out.println(employee.age);19     }20 }

如果不注释第9行的代码,输出为:

100

100

也就是employ的age并没有改变,这是为什么呢?

注释掉第9行代码,输出就是:

100

1000

这时候employee的age是改变了的,为什么呢?

疑问待求证!!

 

转载于:https://www.cnblogs.com/bolumiere/p/6610338.html

你可能感兴趣的文章
Harris角点检测
查看>>
Struts2的处理流程及为Action的属性注入值
查看>>
设计中最常用的CSS选择器
查看>>
Maven项目打包成可执行Jar文件
查看>>
nginx http proxy 正向代理
查看>>
对BFC的总结
查看>>
23醒
查看>>
win7每天出现taskeng.exe进程的解决方案
查看>>
React Children
查看>>
大数据等最核心的关键技术:32个算法
查看>>
Maven多模块项目搭建
查看>>
redis列表list
查看>>
雷林鹏分享: C# 简介
查看>>
实用类-<Math类常用>
查看>>
构建之法阅读笔记之四
查看>>
10.15习题2
查看>>
Windows Server 2008 R2 备份与恢复详细实例
查看>>
Ubuntu上kubeadm安装Kubernetes集群
查看>>
关于java学习中的一些易错点(基础篇)
查看>>
MFC的多国语言界面的实现
查看>>