在函数中修改成员变量字符串和数组,它们的值会发生变化吗
题目:阅读下面的代码,写出输出结果_____
public class Main {String str = new String("beijing");char[] ch = {'祖', '国', '富', '强'};public static void main(String[] args) {Main ex = new Main();ex.change(ex.str, ex.ch);System.out.print(ex.str + " and ");System.out.print(ex.ch);}public void change(String str, char[] ch) {str = "chengdu";ch[0] = '我';}
}
答案:beijing and 我国富强
解释:
其实这道题并不难,我写出来是因为我之前对这个地方理解的不是很正确,所以记录一下,重要说的是两点,最重要的一点肯定是利用函数去改变作为成员变量的字符串和数组,验证它们是否会改变,第二点是记录一下char[]数组的输出方式,之前我对这个也不了解.
接下来先说第一个,当调用change()函数的时候只是把String对象和char[]对象的地址传输过去了,在方法内部改变字符串的时候其实改变的不是字符串地址中的值,而是在字符串常量池中新建一个字符串对象,然后把这个对象的地址赋值给这个字符串变量,但是被赋值的变量是形参,和对象字符串属性无关,所以不会改变字符串对象指向的具体值.
而在函数内部可以通过char[]数组的地址去改变char[]数组内部存储的值,不过char[]数组指向的地址还是没有发生变化的,只是指向地址中的部分值发生了改变.
所以最终输出的时候字符串没有变化,而char[]数组发生了变化,上面已经说完了第一点.
下面来说第二点,对于char[]数组的输出方式,打印函数对char[]做了特殊处理,打印输出的是char中的各个元素值,例如char[]是{‘1’,‘2’,‘3’},那么打印输出的就是123,虽然我也没有看懂底层的原理,不过实验证明就是这种输出方式,所以先记着吧,说完了第二点,肯定就可以知道为什么输出这个内容了。
在函数中修改成员变量字符串和数组,它们的值会发生变化吗相关推荐
- C++如何在const函数修改成员变量的值
C++如何在const函数修改成员变量的值 在C++,总所周知,c++不允许在const函数直接修改成员变量的值,想要达到此目的,有两种方式: 使用mutable关键字 造一个假的this去操作成员变 ...
- C++中常对象、常成员函数、常成员变量
用const修饰的类对象叫做常对象, 用const修饰的成员函数叫常成员函数, 用const修饰的成员变量叫常成员变量, 常对象: 型如: const <类名> <对象 ...
- 【C++】空指针调用成员函数及访问成员变量
最近在review代码的时候发现,使用了空指针调用成员函数,并且成员函数内部有使用到成员变量,居然没有出错.很是奇怪,就用一篇博客把关于空指针调用成员函数相关的内容总结起来. 空指针调用成员函数 调用 ...
- c语言volatile 结构体,volatile一般用来修饰结构体中的成员变量吗?
保留字肯定就是关键字撒, (1)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多 ...
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...
- 28.构造函数中,成员变量一定要通过初始化列表来初始化的?
首先要明确:如果对象成员是const或者引用的话,必须将其初始化! 构造函数中,成员变量一定要通过初始化列表来初始化的的几种情况! 1)对象成员是const或者引用 #include <iost ...
- Java接口中的成员变量为什么必须声明为public static final?
我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点, 而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而 ...
- C++在函数中修改指针值
main函数中声明一个指针,在函数中修改该指针的值,希望永久修改指针值应如何做??? 错误案例: void a(int* p1) {int c = 1;int* b = &c;p1 = b;c ...
- 在c语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值,计算机二级考试 程序设计基础试题及答案三...
<程序设计基础>考试试卷三 1. 判断下面标识符中哪个是C语言中合法的用户定义标识符: A. a-b B. #abd C. typedef D. _max 2. -b?在内存中占个字节,& ...
最新文章
- 机器学习的中流砥柱:用于模型构建的基础架构工具有哪些?
- PHP中获取当前页面的完整URL
- 文件夹的位置_感觉电脑变卡了?删除这5个文件夹 C盘立马清爽
- html5简介的文本框,HTML5实战与剖析之表单——文本框脚本
- python基础课程2(看代码看注释)--条件判断|循环|函数|生成器|类
- Damon Edwards:IT运营是最可预测的DevOps差异化因素
- SAS在金融中的应用二
- Autodesk Map3d的应用和开发
- Java Main Differences between HashMap HashTable and ConcurrentHashMap
- paip.银行卡号的效检
- csv文件转换成utf-8格式乱码
- windows xp下无线网卡断线的问题。
- 两台计算机怎么ping通,怎么ping网络(2个网段电脑怎么ping通)
- 【第一节】抠图 -- 薄、透、露的朦胧感
- Android 接入穿山甲广告
- mysql 判断邮箱_Java 判断电话号码邮箱代码示例讲解
- WiFi大师小程序3.0.9独立版源码
- 如何构建Birt报表应用程序?
- 厘摩(centimorgan,cM)到底是啥鬼
- UML软件开发与建模工具Enterprise Architect发布最新版本v15.2