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 相关文章推荐
jQuery学习2 选择器的使用说明
Feb 07 Javascript
判断一个变量是数组Array类型的方法
Sep 16 Javascript
基于javascript实现图片左右切换效果
Jan 25 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
Dec 21 Javascript
Web前端框架Angular4.0.0 正式版发布
Mar 28 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
深入理解React中何时使用箭头函数
Aug 23 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
May 09 Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
JavaScript基于SVG的图片切换效果实例代码
Dec 15 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
谈谈python中GUI的选择
2018/03/01 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
Python 使用多属性来进行排序
2019/09/01 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
PyQt5实现简单的计算器
2020/05/30 Python
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
自我鉴定范文300字
2013/10/01 职场文书
毕业生物理教师求职信
2013/10/17 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
2015年教师节主持词
2015/07/03 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python