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 相关文章推荐
JS中的this变量的使用介绍
Oct 21 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
JavaScript Date对象详解
Mar 01 Javascript
JS实现鼠标框选效果完整实例
Jun 20 Javascript
JS简单随机数生成方法
Sep 05 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 Javascript
jQury Ajax使用Token验证身份实例代码
Sep 22 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
Sep 19 Javascript
刷新页面后让控制台的js代码继续执行
Sep 20 Javascript
关于Vue中axios的封装实例详解
Oct 20 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 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 组件化编程技巧
2009/06/06 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
python实现的重启关机程序实例
2014/08/21 Python
python基础教程之常用运算符
2014/08/29 Python
Python中实现三目运算的方法
2015/06/21 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
比利时香水网上商店:NOTINO
2018/03/28 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
一位农村小子的自荐信
2014/04/07 职场文书
关于安全的演讲稿
2014/05/09 职场文书
就业证明函
2015/06/17 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
财产分割协议书
2016/03/22 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
python必学知识之文件操作(建议收藏)
2021/05/30 Python
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript