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的原理和实现技巧介绍
Nov 08 Javascript
js弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
jquery操作 iframe的方法
Dec 03 Javascript
node.js中的fs.readFileSync方法使用说明
Dec 15 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
May 13 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
原生js实现选项卡功能
Mar 08 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
Aug 16 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 Javascript
详解JS预解析原理
Jun 16 Javascript
jQuery实现放大镜案例
Oct 19 jQuery
基于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用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
Python中类的继承代码实例
2014/10/28 Python
python 删除非空文件夹的实例
2018/04/26 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Python实现数值积分方式
2019/11/20 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
服务行业口号
2014/06/11 职场文书
2014年政工师工作总结
2014/12/18 职场文书
科技活动总结范文
2015/05/11 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL