题目:阅读下面的代码,写出输出结果_____

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,虽然我也没有看懂底层的原理,不过实验证明就是这种输出方式,所以先记着吧,说完了第二点,肯定就可以知道为什么输出这个内容了。

在函数中修改成员变量字符串和数组,它们的值会发生变化吗相关推荐

  1. C++如何在const函数修改成员变量的值

    C++如何在const函数修改成员变量的值 在C++,总所周知,c++不允许在const函数直接修改成员变量的值,想要达到此目的,有两种方式: 使用mutable关键字 造一个假的this去操作成员变 ...

  2. C++中常对象、常成员函数、常成员变量

    用const修饰的类对象叫做常对象, 用const修饰的成员函数叫常成员函数, 用const修饰的成员变量叫常成员变量, 常对象: 型如:      const  <类名>  <对象 ...

  3. 【C++】空指针调用成员函数及访问成员变量

    最近在review代码的时候发现,使用了空指针调用成员函数,并且成员函数内部有使用到成员变量,居然没有出错.很是奇怪,就用一篇博客把关于空指针调用成员函数相关的内容总结起来. 空指针调用成员函数 调用 ...

  4. c语言volatile 结构体,volatile一般用来修饰结构体中的成员变量吗?

    保留字肯定就是关键字撒, (1)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多 ...

  5. 学习旧岛小程序 (5) observer 函数中修改属性的值

    不要在一个属性的 observer  函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...

  6. 28.构造函数中,成员变量一定要通过初始化列表来初始化的?

    首先要明确:如果对象成员是const或者引用的话,必须将其初始化! 构造函数中,成员变量一定要通过初始化列表来初始化的的几种情况! 1)对象成员是const或者引用 #include <iost ...

  7. Java接口中的成员变量为什么必须声明为public static final?

    我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点, 而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而 ...

  8. C++在函数中修改指针值

    main函数中声明一个指针,在函数中修改该指针的值,希望永久修改指针值应如何做??? 错误案例: void a(int* p1) {int c = 1;int* b = &c;p1 = b;c ...

  9. 在c语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值,计算机二级考试 程序设计基础试题及答案三...

    <程序设计基础>考试试卷三 1. 判断下面标识符中哪个是C语言中合法的用户定义标识符: A. a-b B. #abd C. typedef D. _max 2. -b?在内存中占个字节,& ...

最新文章

  1. 机器学习的中流砥柱:用于模型构建的基础架构工具有哪些?
  2. PHP中获取当前页面的完整URL
  3. 文件夹的位置_感觉电脑变卡了?删除这5个文件夹 C盘立马清爽
  4. html5简介的文本框,HTML5实战与剖析之表单——文本框脚本
  5. python基础课程2(看代码看注释)--条件判断|循环|函数|生成器|类
  6. Damon Edwards:IT运营是最可预测的DevOps差异化因素
  7. SAS在金融中的应用二
  8. Autodesk Map3d的应用和开发
  9. Java Main Differences between HashMap HashTable and ConcurrentHashMap
  10. paip.银行卡号的效检
  11. csv文件转换成utf-8格式乱码
  12. windows xp下无线网卡断线的问题。
  13. 两台计算机怎么ping通,怎么ping网络(2个网段电脑怎么ping通)
  14. 【第一节】抠图 -- 薄、透、露的朦胧感
  15. Android 接入穿山甲广告
  16. mysql 判断邮箱_Java 判断电话号码邮箱代码示例讲解
  17. WiFi大师小程序3.0.9独立版源码
  18. 如何构建Birt报表应用程序?
  19. 厘摩(centimorgan,cM)到底是啥鬼
  20. UML软件开发与建模工具Enterprise Architect发布最新版本v15.2

热门文章

  1. 购物车中 商品的选中状态之后的一些业务逻辑操作
  2. BootstrapTable冻结表头(一)
  3. Mysql 在DOS窗口下的操作
  4. Android中Service的使用
  5. 第二阶段个人博客总结7
  6. Oracle BBED 工具介绍
  7. java基础—List集合的常规方法操作
  8. idea 控制台程序的打包
  9. SpringBoot整合阿里Druid数据源及Spring-Data-Jpa
  10. 02024_自定义异常的练习