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 AutoScroller 函数类
May 29 Javascript
JavaScript中yield实用简洁实现方式
Jun 12 Javascript
javascript控制图片播放的实现代码
Jul 29 Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
JavaScript中apply方法的应用技巧小结
Sep 29 Javascript
详解JS: reduce方法实现 webpack多文件入口
Feb 14 Javascript
jquery实现下拉菜单的手风琴效果
Jul 23 jQuery
Vue实现web分页组件详解
Nov 28 Javascript
vue 自动化路由实现代码
Sep 03 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
Nov 12 Javascript
JavaScript实现音乐播放器
Aug 14 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打造属于自己的MVC框架
2012/03/07 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
vue.js的安装方法
2017/05/12 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
Python 解析XML文件
2009/04/15 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python 画出来六维图
2019/07/26 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
python  logging日志打印过程解析
2019/10/22 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书