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 相关文章推荐
Javascript String对象扩展HTML编码和解码的方法
Jun 02 Javascript
JQueryEasyUI Layout布局框架的使用
Apr 08 Javascript
js动态为代码着色显示行号
May 29 Javascript
设置checkbox为只读(readOnly)的两种方式
Oct 11 Javascript
jquery模拟alert的弹窗插件
Jul 31 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
浅谈jquery的map()和each()方法
Jun 12 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
javascript事件的传播基础实例讲解(35)
Feb 14 Javascript
vue实现菜单切换功能
May 08 Javascript
jQuery位置选择器用法实例分析
Jun 28 jQuery
阿望教你用vue写扫雷小游戏
Jan 20 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
菜鸟修复电子管记
2021/03/02 无线电
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
js getElementsByTagName的简写方式
2010/06/27 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python使用matplotlib绘制热图
2018/11/07 Python
Python魔法方法详解
2019/02/13 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Django中的AutoField字段使用
2020/05/18 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
自荐信范文
2013/12/10 职场文书
校庆标语集锦
2014/06/25 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
销售员岗位职责
2015/02/10 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL