私有变量的使用:从传值到传引用
来源:互联网 发布:vb crc16校验源码 编辑:程序博客网 时间:2024/05/18 14:23
举个简单的例子: 在Marry类中定义了 private int[] gay = new int[100]; 这个私有的数组变量, 然后在后面定义set ()和get()方法. 然后, 我们在这个类外部实例化这个对象, 在Main类中写入: Marry lesbian = new Marry(); 然后就可以可以这样赋值操作: lesbian.getGay()[i] = 5, 亲测有效
public class Marry {private String heiheih = "来啊";private int[] gay = new int[100]; // 私有数组gay的get()方法public int[] get(){return this.gay;} // 私有数组gay的set()方法 public void set(int[] array){this.gay = array;} // 私有字符串型变量heiheih的get()方法public String getHeiheih(){return this.heiheih; }}
// 在Marry类的外部实例化对象并测试输出public class Main {public static void main(String[] args) {Marry lesbian = new Marry();lesbian.get()[5] = 100;lesbian.get()[6] = 5;System.out.println(Arrays.toString(lesbian.get()));}}输出结果
[0, 0, 0, 0, 0, 100, 5, 0, 0, 0]
这是不是意味着我们完全就可以只用一个get()方法就可完成private成员的访问和赋值操作,而不用多定义set()这个累赘了呢?(这个例子中虽然set()方法传入的参数是一个数组,但赋值时也是挨个元素逐一赋值,和使用get()方法赋值在效率上并没有什么区别)
但如果private后面不是数组而是其他类型的变量如String,int,char等数据类型时就不能这么玩了,用get()方法完全赋不了值的,此时的编译器会报错"The left-hand side of an assignment must be a variable",提示我们左边必须分配变量
// 在main入口中用get()方法修改私有字符串变量会报错 lesbian.getHeiheih() = "g";
原来,我们之所以能用get()方法对数组型私有变量进行访问修改, 是由于get()方法在向外传递数组型变量时, 传递的是数组的引用(即存放数组的地址). 不仅仅是私有数组变量的传递, Java中在对数组操作时, 传递的基本上都是数组的引用. 我们既然知道了数组的存放地址, 当然就可以对其进行任意的修改, 所有对于数组型的私有变量来说, get()方法已经将数组的存储地址告诉了外部, set()方法确实可有可无. 但其他类型的私有变量却不同, 比如int整型数据, get()方法在向外返回这些类型的数据时, 实际上是将int类型的数据复制一份存储在了寄存器中(而数组是将数组的引用地址存储到了寄存器中), 将寄存器中的值传到外面, 我们却并不知道这个变量的变量名和存储地址等信息, 传出的值相当于get()方法计算得出的字面量, 所有这种情况下, 我们就必须要用set()方法将数据传入私有变量所存放的位置才能进行修改.
以上部分仅为个人理解,可能存在一些偏差,欢迎指正,还望不吝赐教.
- 私有变量的使用:从传值到传引用
- JS私有变量的使用。。。
- 返回类的私有指针成员变量的引用
- 有关python私有变量使用的例子
- JavaScript中私有变量的使用
- 从一个修改私有变量的问题想到的
- 从一个修改私有变量的问题想到的
- 从一个修改私有变量的问题想到的
- C++引用变量的使用
- 引用变量.(变量)的使用
- Python的私有变量
- 类的私有变量
- 类的私有变量
- Runtime的使用5 【对私有变量的修改】
- js的私有变量和私有方法
- 使用指针在类外修改类的私有变量
- IOS学习 Block语法的使用:声明、创建、引用局部变量,使用block从后往前传值
- C++ 类成员引用变量的使用
- mnist test
- css练习之导航条
- 根据PSD登陆页面设计稿切图制作HTML网页全过程
- 删除链表中重复的结点
- tree命令安装与使用
- 私有变量的使用:从传值到传引用
- NCURSES程序设计之拼图游戏
- win10将Submit Text3添加到右键打开
- 学习笔记2
- 那些关于http的故事
- debounce与throttle实现与原理
- NYOJ 265 积木
- LIF神经元
- Mysql Explain 一