Java字符串的参数传递为何没改变原本的值

例题

public class StringTest{String str = new String("good");char[] ch = {'t', 'e', 's', 't'};public void change(String str, char ch[]){str = "Hello";ch[0] = 'b';}public static void main(String[] args){StringTest s = new StringTest();s.change(s.str, s.ch);System.out.println(str);//输出goodSystem.out.println(ch);//输出best}
}

解析


请牢记值传递机制,即:变量是什么就传什么值给形参

​ 本题change()中,传入了s的属性str的值(地址)给了形参str,然后再对形参str进行赋值。在这个过程中,没有通过属性str存储的地址对地址的数据进行任何修改(String类型也基本上是不能被修改的),而属性本身的地址值是不可能变的,所以方法执行后属性是不变的。

总结

  • 值传递,所以只是将变量的值传递给了形参(数据或地址值)
  • 想修改原来地址的数据只有通过传地址值的方式,并且通过这个地址值对数据进行修改
  • 传参数之后,原来变量的存储的值是不会变的:地址值不可能变化,只是地址指向的内容可能改变了;基本数据类型变量的数据也不可能改变
  • 字符串存储的内容(常量池中)无特殊情况是不能通过地址值改变的,只可能通过改变地址值来改变指向内容。所以字符串变量可以和基本数据类型基本等同看待,即传参调用后原本的值是不会改变的。

Java字符串的参数传递为何没改变原本的值相关推荐

  1. json对象,java对象,json字符串,java字符串转换方式,没写的自己去看源码!

    package com.sgai.property;import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjs ...

  2. 为什么String作为形参不会改变本身的值?

    为什么 数组和String 同为引用数据类型,String的地址传递不会改变原本的值? 查看API文档可知String类型的构造器有一个final修饰符,final修饰符导致了String一旦定义就是 ...

  3. 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )

    文章目录 I . C/C++ 中的 Java 字符串数组类型 II . 获取字符串数组长度 III . 获取字符串数组元素 IV . 类型强转 ( jobject -> jstring ) V ...

  4. Java字符串格式化详解

    在 Java 的 String 类中,可以使用 format() 方法格式化字符串,该方法有两种重载形式: String.format(String format, Object- args) 和 S ...

  5. 面试官刁难:Java字符串可以引用传递吗?

    老读者都知道了,六年前,我从苏州回到洛阳,抱着一幅"海归"的心态,投了不少简历,也"约谈"了不少面试官,但仅有两三个令我感到满意.其中有一位叫老马,至今还活在我 ...

  6. 聊一聊Java字符串的不可变

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 在 Java 开发中 String (字符串)对象是我们使用最频繁的对象,也是很重要的 ...

  7. java 字符串用法_java中字符串的用法

    1.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持.甚至Java的标识符都可以用汉字,但是没人会用吧(只在一本清华的< ...

  8. java字符串常量池长度_Java String类相关知识梳理(含字符串常量池(String Pool)知识)...

    目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...

  9. java函数的参数传递

    java的函数参数传递 参数传递 java是:值传递(直接复制一个副本) 对于基础数据类型,直接复制新的对应基础类型数据. 对于引用类型,复制的是对象的引用.在不改变对象引用的情况下改变形参的成员变量 ...

最新文章

  1. 如何设计一个高性能CPU?
  2. 『ExtJS』01 009. ExtJS 4 方法重载
  3. web实现QQ第三方登录 开放平台-web实现QQ第三方登录
  4. delphi开发回忆录——示例源码下载
  5. Visual Studio 2017最新版正式发布!适用于任何开发人员、平台及APP丨附下载
  6. 子元素是字典列表转成字典
  7. python之jieba库
  8. 莫队算法(Mo's_Algorithm)
  9. ef.extensions mysql_EFcore 使用 EFCore.BulkExtensions(不支持mysql)或 EntityFramework-Plus 批量增加、删除、修改...
  10. 【视频版】最新版Swagger 3升级指南和新功能体验!
  11. Linux命令:find
  12. JVM性能调优监控工具
  13. Excel与对齐的文本文件互转
  14. ios视频播放器封装(全屏播放,锁屏、手势调节亮度、音量、进度)
  15. magisk卸载内置软件_手把手教你使用ADB卸载手机内置App软件
  16. 我的阿里巴巴图标公开库
  17. next_day函数用法
  18. 按键精灵--多点找形状介绍
  19. Fairplay之streamingContentKeyRequestDataForApp makeStreamingContentKeyRequestDataForApp
  20. 十一招解决:系统IE部分网页打不开怎么办(转载)

热门文章

  1. 数据挖掘第三版课后题答案
  2. Android 学习之路 之 Android应用的基本组件介绍(六)
  3. (Java) [USACO07DEC]Bookshelf B
  4. 手机实名制果真成了空头口号
  5. li标签的使用及样式
  6. Java中String类如何读入空格
  7. 腹黑 HR 黑话大全:那些残忍的潜台词!
  8. RSTP 协议的改进,RSTP的保护机制
  9. 网络游戏衰败现象分析
  10. redis主从同步的坑