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 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
JS iFrame加载慢怎么解决
May 13 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
JavaScript基于对象去除数组重复项的方法
Oct 09 Javascript
获取jqGrid中选择的行的数据
Nov 30 Javascript
图片懒加载插件实例分享(含解析)
Jan 09 Javascript
用Cordova打包Vue项目的方法步骤
Feb 02 Javascript
vue.js 2.0实现简单分页效果
Jul 29 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 Javascript
javascript实现贪吃蛇经典游戏
Apr 10 Javascript
详谈vue中router-link和传统a链接的区别
Jul 22 Javascript
详解React中共享组件逻辑的三种方式
Feb 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
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
js变量作用域及可访问性的探讨
2006/11/23 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
AngularJS基础知识
2014/12/21 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
详解Python中的四种队列
2018/05/21 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
python的json包位置及用法总结
2020/06/21 Python
如何完美的建立一个python项目
2020/10/09 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
职业教育毕业生求职信
2013/11/09 职场文书
总经理驾驶员岗位职责
2013/12/04 职场文书
写给女生的道歉信
2014/01/14 职场文书
消防安全员岗位职责
2014/03/10 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
公司租车协议书
2015/01/29 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技