先把几个知识点列出来:

值传递:

当基本类型作为参数传入方法时,无论该参数在方法内怎样被改变,外部的变量原型总是不变的。

引用传递:

当方法传入的参数为引用数据类型(类、接口、数组)时,方法改变参数变量的同时变量原型也会随之改变。

那如果传入的参数如果是String呢,这时候就要注意了,通常我们认为的几种情况:

结果和String的赋值方式有关系:直接赋值和对象赋值。

结果和String的变值方式有关系:“=”变值与方法变值。

public static void main(String[] args) {

String one = "Test one";//直接赋值

String two = new String("Test two");//对象赋值

changeString(one);

changeString(two);

System.out.println(one);

System.out.println(two);

changeStringOfConcat(one);

changeStringOfConcat(two);

System.out.println(one);

System.out.println(two);

}

public static void changeString(String original){

original = original + " is changed !";//"="变值

System.out.println("The changed inner String: " + original);

}

public static void changeStringOfConcat(String original){

original = original.concat(" is changed of concat !");//方法变值

System.out.println("The changed inner String: " + original);

}

输出结果:

The changed inner String: Test one is changed !

The changed inner String: Test two is changed !

Test one

Test two

The changed inner String: Test one is changed of concat !

The changed inner String: Test two is changed of concat !

Test one

Test two

从结果来看我们发现之前认为的几种都是错误的。

其实,要想真正理解一个类或者一个API/框架的最直接的方法就是看源码,现在我看String类的构造函数

public String() {

this.value = new char[0];

}

public String(String original) {

this.value = original.value;

this.hash = original.hash;

}

从中不难发现String实际是通过char[]来储存的。

String就相当于是char[]的包装类。包装类的特质之一就是在对其值进行操作时会体现出其对应的基本类型的性质。

java 参数 string_关于Java中String类型的参数传递问题相关推荐

  1. java string设置编码_详解Java中String类型与默认字符编码

    为什么写这个 至于为什么要写这个,主要是一句mmp一定要讲,绕了一上午,晕死 Java程序中的中文乱码问题一直是一个困扰程序员的难题,自己也不例外,早在做项目时就遇到过很多编码方式的坑,当时想填来着, ...

  2. java语言特点 字符串不变_面试必问:Java中String类型为什么设计成不可变的?

    这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下. 想要完全了解String,在这里我们需要解决以下 ...

  3. java中数组的返回值是什么类型_面试必问:Java中String类型为什么设计成不可变的?...

    这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下. 想要完全了解String,在这里我们需要解决以下 ...

  4. c++ java string_C++中string类型的内部结构是什么?

    C++中string类型的内部结构是什么? string a; 为什么sizeof(a)是32? ostringstream的问题 在代码中#include 了,声明了一个ostringstream变 ...

  5. Object Pascal中String类型的内幕探讨 (转)

    Object Pascal中String类型的内幕探讨 (转) 在object Pascal中,String(准确的说是AnsiString)是一种可变长度的字符串,通过PChar(AString)可 ...

  6. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  7. java string类型_java中String类型

    String类型是字符串类型..字符串一旦创建不可以在改变."abc"字符串对象一旦创建,不可以再改成"abcd" 提升字符串的访问效率:在程序中使用了&quo ...

  8. Java中String类型的概述

    String的特性 1 String类:代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 2 String是一个final类,代表不可变的字 ...

  9. java中String类型对象在克隆时候的特殊性

    查看原码可知 String类型被final所修饰,不可对它的实例进行修改 即:String类型的实例是一个常量,跟八大基本类型 int .double等一样 但根据我们所学到的,String是一个引用 ...

最新文章

  1. 搞基础理论研究有什么用?
  2. jQuery 1.4 版本的十五个新特性-转载
  3. CentOS7 升级 curl 支持 HTTP2 与 TLS 1.3
  4. python菜鸟教程m-Python map() 函数
  5. 轮滑---1、动作和杂记
  6. 前端性能优化:使用媒体查询加载指定大小的背景图片
  7. git 文件全部标红_git冲突解决,代码冲突、合并冲突。【IDEA版本】
  8. 详解MySQL查询缓存
  9. WB实验关键点!附详细实验检查清单
  10. 测试人员如何使用浏览器的f12_测试过程中如何快速定位一个bug
  11. 思科(Cisco)路由器策略路由配置详解
  12. vue组件一直注册不了_Vue自定义组件及组件的注册方法
  13. cpout引脚是干什么的_FPGA中差分信号的定义和使用(一)
  14. Struts2 xml配置
  15. 【tool】部署前端工具
  16. WM5/6常见进程列表
  17. 分布式ID生成器方案
  18. 关键词拍卖竞价机制,排序与计费规则
  19. 华为鸿蒙系统有没有畅玩7c,华为荣耀畅玩7C有什么新功能
  20. 高防服务器防御中“清洗”是什么意思

热门文章

  1. python integer_【Python】string/list/integer常用函数总结
  2. python读取输入流_python – 将一个正在运行的程序的输出流传输到其他正在运行的程序的输入流...
  3. 从0搭建一个Springboot+vue前后端分离项目(一)安装工具,创建项目
  4. 解决php文件包含的问题;Web_php_include-攻防世界
  5. python3 基础教程: 文件read方法(read、readline、readlines)
  6. Python教程:跳出多层循环for、while
  7. Python基础教程:生成器
  8. Python的oop概述
  9. php 大图找小图,点击小图弹出大图,点击网页任何部分隐藏大图
  10. numpy数组如何将数组中的元素批量保留小数(或精确到指定位)?np.around()函数(与np.round()函数等价?)