java中String类型变量的赋值问题介绍


Posted in Javascript onMarch 23, 2016

运行下面这段代码,其结果是什么?

package com.test;

public class Example {
  
  String str = new String("good");
  char[] ch = { 'a', 'b', 'c' };

  public static void main(String[] args) {
    Example ex = new Example();
    ex.change(ex.str, ex.ch);
    System.out.println(ex.str);
    System.out.println(ex.ch);
  }

  public void change(String str, char ch[]) {
    str = "test ok";
    ch[0] = 'g';
  }
  
}

结果如下:

good
gbc

解说:

java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的(注意:是内容不可变)。

也就是说,假设代码中有String str = “aa”;str=“bb”;,则第二条语句不是改变“aa”原来所在存储地址中的内容,而是另外开辟了一个空间用来存储“bb”;同时由于str原来指向的“aa”现在已经不可达,jvm会通过GC自动回收。
 
在方法调用时,String类型和数组属于引用传递,在上述代码中,str作为参数传进change(String str, char ch[]) 方法,方法参数str指向了类中str指向的字符串,但str= "test ok"; 语句使得方法参数str指向了新分配的地址,该地址存储“test ok”,而原来的str仍然指向“good”。对于数组而言,在change方法中,方法参数ch指向了类中ch指向的数组,ch[0] = 'g';语句改变了类中ch指向的数组的内容
 

我们再来看下面这段代码,它的运行结果是什么?

package com.test;

public class Example {
  
  String str = new String("good");
  char[] ch = { 'a', 'b', 'c' };

  public static void main(String[] args) {
    Example ex = new Example();
    ex.change(ex.str, ex.ch);
    System.out.println(ex.str);
    System.out.println(ex.ch);
  }

  public void change(String str, char ch[]) {
    str = str.toUpperCase();
    ch = new char[]{ 'm', 'n' };
  }
  
}

结果如下:

good
abc

有了前面的解释,这个结果是不是在意料之中?!

以上这篇java中String类型变量的赋值问题介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 遍历验证所有文本框的值
Aug 27 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
jQuery Migrate 1.1.0 Released 注意事项
Jun 14 Javascript
20个实用的JavaScript技巧分享
Nov 28 Javascript
jQuery仿京东商城楼梯式导航定位菜单
Jul 25 Javascript
浅谈JavaScript中的this指针和引用知识
Aug 05 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
vue2实现数据请求显示loading图
Nov 28 Javascript
angular 数据绑定之[]和{{}}的区别
Sep 25 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
Dec 26 Javascript
Vue开发中遇到的跨域问题及解决方法
Feb 11 Javascript
基于javascript实现泡泡大冒险网页版小游戏
Mar 23 #Javascript
基于javascript实现句子翻牌网页版小游戏
Mar 23 #Javascript
基于jquery编写的放大镜插件
Mar 23 #Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 #Javascript
JavaScript弹出对话框的三种方式
Mar 23 #Javascript
JS随机洗牌算法之数组随机排序
Mar 23 #Javascript
JavaScript学习笔记之取数组中最大值和最小值
Mar 23 #Javascript
You might like
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
Python入门教程之if语句的用法
2015/05/14 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
设置python3为默认python的方法
2018/10/31 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
python3使用GUI统计代码量
2019/09/18 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
如何进行Linux分区优化
2016/09/13 面试题
中科软笔试题和面试题
2014/10/07 面试题
经济信息管理专业大学生求职信
2013/09/27 职场文书
竞选班长演讲稿
2013/12/30 职场文书
祖国在我心中演讲稿
2014/01/15 职场文书
卫生安全检查制度
2014/02/04 职场文书
小学生环保标语
2014/06/13 职场文书
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL