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 相关文章推荐
让innerHTML的脚本也可以运行起来
Jul 01 Javascript
jQuery 对象中的类数组操作
Apr 27 Javascript
this和执行上下文实现代码
Jul 01 Javascript
一些实用的jQuery代码片段收集
Jul 12 Javascript
用Jquery重写windows.alert方法实现思路
Apr 03 Javascript
JavaScript的递归之递归与循环示例介绍
Aug 05 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
Apr 04 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
在vscode 中设置 vue模板内容的方法
Sep 02 Javascript
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
基于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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
使用python存储网页上的图片实例
2018/05/22 Python
python计算两个地址之间的距离方法
2018/06/09 Python
python三大神器之fabric使用教程
2019/06/10 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
财务会计专业应届毕业生求职信
2013/10/18 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
全神贯注教学反思
2014/02/03 职场文书
预备党员转正考核材料
2014/06/03 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
合作意向书怎么写
2019/06/24 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
python实现双链表
2022/05/25 Python