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 相关文章推荐
用于table内容排序
Jul 21 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
Feb 27 Javascript
JavaScript实现图片自动加载的瀑布流效果
Apr 11 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
Apr 29 Javascript
JS实现简单的二元方程计算器功能示例
Jan 03 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
Vue中的Vux配置指南
Dec 08 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
微信小程序scroll-view的滚动条设置实现
Mar 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小偷程序)
2014/08/23 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
javascript实现商品图片放大镜
2019/11/28 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python发布模块的步骤分享
2014/02/21 Python
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python中的hypot()方法使用简介
2015/05/18 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
投标承诺书怎么写
2014/05/24 职场文书
车队安全员岗位职责
2015/02/15 职场文书
宇宙与人观后感
2015/06/05 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
解决Python字典查找报Keyerror的问题
2021/05/26 Python
Redis基本数据类型String常用操作命令
2022/06/01 Redis