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 读取xml,写入xml 实现代码
Jul 10 Javascript
用于deeplink的js方法(判断手机是否安装app)
Apr 02 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
Jun 20 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
jquery获得同源iframe内body下标签的值的方法
Sep 25 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
深入理解JQuery循环绑定事件
Jun 02 Javascript
JQuery DIV 动态隐藏和显示的方法
Jun 23 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 Javascript
vue-cli 3 全局过滤器的实例代码详解
Jun 03 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
php zend 相对路径问题
2009/01/12 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
上课迟到检讨书
2014/01/19 职场文书
工作自我推荐信范文
2015/03/25 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
六一亲子活动感想
2015/08/07 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
Python OpenCV实现图形检测示例详解
2022/04/08 Python
python高温预警数据获取实例
2022/07/23 Python