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实现禁止后退的方法
Dec 27 Javascript
Prototype1.5 rc2版指南最后一篇之Position
Jan 10 Javascript
用js实现多域名不同文件的调用方法
Jan 12 Javascript
模拟用户操作Input元素,不会触发相应事件
May 11 Javascript
javascript CSS画图之基础篇
Jul 29 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
Mar 27 Javascript
JavaScript使用Replace进行字符串替换的方法
Apr 14 Javascript
jQuery获取及设置表单input各种类型值的方法小结
May 24 Javascript
js点击任意区域弹出层消失实现代码
Dec 27 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
js动态获取时间的方法分析
Aug 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
PHP n个不重复的随机数生成代码
2009/06/23 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
Yii中表单用法实例详解
2016/01/05 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
javascript 写类方式之四
2009/07/05 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
Python实现excel转sqlite的方法
2017/07/17 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
基于Python绘制个人足迹地图
2020/06/01 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
简单的Python人脸识别系统
2020/07/14 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
超级实用的8个Python列表技巧
2020/08/24 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
门卫班长岗位职责
2013/12/15 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
反邪教警示教育方案
2014/05/13 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
经典导游欢迎词
2015/01/26 职场文书
2015年助残日活动总结
2015/03/27 职场文书