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 相关文章推荐
!DOCTYPE声明对JavaScript的影响分析
Apr 12 Javascript
jquery弹出层类代码分享
Dec 27 Javascript
js 赋值包含单引号双引号问题的解决方法
Feb 26 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
一张Web前端的思维导图分享
Jul 03 Javascript
浅析js绑定事件的常用方法
May 15 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
Jun 22 Javascript
canvas实现环形进度条效果
Mar 23 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 Javascript
JavaScript中变量、指针和引用功能与操作示例
Aug 04 Javascript
JavaScript数据结构之栈实例用法
Jan 18 Javascript
原生JS运动实现轮播图
Jan 02 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
实用函数10
2007/11/08 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
javascript生成大小写字母
2015/07/03 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
python调用外部程序的实操步骤
2019/03/04 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
python能否java成为主流语言吗
2020/06/22 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
八项规定整改方案
2014/02/21 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
市场部经理岗位职责
2015/02/02 职场文书
环境建议书
2015/02/04 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL