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 相关文章推荐
用于节点操作的API,颠覆原生操作HTML DOM节点的API
Dec 11 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
Aug 16 Javascript
javascript实用方法总结
Feb 06 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
Oct 16 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
May 18 Javascript
jQuery 3 中的新增功能汇总介绍
Jun 12 Javascript
基于BootStrap实现简洁注册界面
Jul 20 Javascript
Bootstrap table使用方法记录
Aug 23 Javascript
JS实现的视频弹幕效果示例
Aug 17 Javascript
vue中在vuex的actions中请求数据实例
Nov 08 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入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
详解Python中的正则表达式
2018/07/08 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
《自然之道》教学反思
2014/02/11 职场文书
书香校园活动方案
2014/02/28 职场文书
经典团队口号大全
2014/06/21 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
社会实践活动总结
2015/02/05 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
详解Django的MVT设计模式
2021/04/29 Python
python周期任务调度工具Schedule使用详解
2021/11/23 Python