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 创建对象(常见的几种方法)
Nov 03 Javascript
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
May 21 Javascript
Prototype 工具函数 学习
Jul 23 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
Mar 21 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
vue-router路由与页面间导航实例解析
Nov 07 Javascript
基于JavaScript实现表格滚动分页
Nov 22 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
在vue中使用echarts(折线图的demo,markline用法)
Jul 20 Javascript
教你一步步实现一个简易promise
Nov 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
简单理解Python中的装饰器
2015/07/31 Python
深入理解python对json的操作总结
2017/01/05 Python
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
介绍一下OSI七层模型
2012/07/03 面试题
若干个Java基础面试题
2015/05/19 面试题
大四自我鉴定范文
2013/10/06 职场文书
料理师求职信
2014/01/30 职场文书
初中校园广播稿
2014/02/02 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
学校运动会报道稿
2014/09/23 职场文书
安全检查汇报材料
2014/12/26 职场文书
长城导游词300字
2015/01/30 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang