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客户端将指定区域导出到Word、Excel的代码
Oct 22 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 Javascript
Knockout visible绑定使用方法
Nov 15 Javascript
简单时间提示DEMO从0开始一直进行计时
Nov 19 Javascript
Javascript中的delete操作符详细介绍
Jun 06 Javascript
Node.js文件操作详解
Aug 16 Javascript
jQuery使用之设置元素样式用法实例
Jan 19 Javascript
JavaScript实现MIPS乘法模拟的方法
Apr 17 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
Vue.js常用指令汇总(v-if、v-for等)
Nov 03 Javascript
浅析Vue 和微信小程序的区别、比较
Aug 03 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
python3序列化与反序列化用法实例
2015/05/26 Python
python更新列表的方法
2015/07/28 Python
Python中pygame安装方法图文详解
2015/11/11 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
解决python报错MemoryError的问题
2018/06/26 Python
python调用c++传递数组的实例
2019/02/13 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
判断单链表中是否存在环
2012/07/16 面试题
出售房屋协议书范本
2014/10/06 职场文书
高中校园广播稿
2014/10/21 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2015年车间主任工作总结
2015/05/21 职场文书