文档章节

关于Java中String类型的参数传递问题

极度思想
 极度思想
发布于 2014/03/26 16:26
字数 467
阅读 1191
收藏 1

先把几个知识点列出来:

值传递

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

引用传递

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

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

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

  2. 结果和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[]的包装类。包装类的特质之一就是在对其值进行操作时会体现出其对应的基本类型的性质。

© 著作权归作者所有

上一篇: JDK内置工具
极度思想
粉丝 0
博文 17
码字总数 4044
作品 0
常州
程序员
私信 提问
加载中

评论(2)

极度思想
极度思想 博主

引用来自“TitanStrong”的评论

傻逼

回复@TitanStrong : 畜生
T
TitanStrong
傻逼
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.5K
30
JNI的提高,Java类型和C(C++)类型转换源代码

JNI的环境准备就不说了, 网上大把大把的, 这里讲到的内容层次稍微深一点, 涉及Java和C的类型问题, 并配了实际案例的源代码。 JNI大体的流程是: Java端发起调用, 使C端的代码运行, 此时从Jav...

晨曦之光
2012/03/09
2.1K
0
Java中String类型的参数传递问题的解析

一、引入示例 public class StringAsParamOfMethodDemo { public static void main(String[] args) {StringAsParamOfMethodDemo sapm = new StringAsParamOfMethodDemo();sapm.testA();} pri......

hc24
2015/10/29
254
0
10个经典的 Java main 方法面试题

以下是笔者认为比较经典的关于Java main方法的面试题,与其说是Java面试题,其实也是Java的一些最基础知识问题,分享给大家,如有错误,请指出。 很多小伙伴都喜欢在网上寻找教程,这种学习的...

紫魅编程
2016/04/23
497
0
10 道关于 Java 泛型的面试题

1.Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道...

蚂蚁-Declan
2018/10/24
113
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
197
8
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
1
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部