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 相关文章推荐
禁止IE用右键的JS代码
Dec 30 Javascript
javascript 回到顶部效果的实现代码
Feb 17 Javascript
checkbox勾选判断代码分析
Jun 11 Javascript
jquery常用操作小结
Jul 21 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
Aug 18 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
JavaScript数组去重算法实例小结
May 07 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
小程序最新获取用户昵称和头像的方法总结
Sep 23 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
Dec 10 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 Javascript
keep-alive保持组件状态的方法
Dec 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下常用正则表达式整理
2010/10/26 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
简单的js表单验证函数
2013/10/28 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
python交互式图形编程实例(三)
2017/11/17 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
Python设计密码强度校验程序
2020/07/30 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
广告学毕业生求职信
2014/01/30 职场文书
个人债务授权委托书
2014/10/17 职场文书
材料员岗位职责范本
2015/04/11 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫