为什么String作为引用类型,在方法内却改变不了String的内容
2017-09-05 15:59
477 查看
public class StringTest {
public static void main(String[] args) {
String s = new String("12");
stringTest(s);
System.out.println(s);
}
public static void stringTest(String s) {
s = s+"123";
}
}
当我们运行这个类的时候,将会在控制台输出12,而不是12123,大家知道为什么吗?若你不是很明白,请看我下面来给你分析,看完你就明白了。
因为虽然String类是引用数据类型,刚开始传进stringTest方法中的s也是指向堆内存当中的"12",但是当我们执行s = s+"123"的时候,因为String类被final修饰,所以在堆内存当中又重新创建了一个”12123“,方法中的s指向了‘12123’的堆内存中首地址,所以,当我们输出s的时候,输出的依然是之前的s的内容。
public static void main(String[] args) {
String s = new String("12");
stringTest(s);
System.out.println(s);
}
public static void stringTest(String s) {
s = s+"123";
}
}
当我们运行这个类的时候,将会在控制台输出12,而不是12123,大家知道为什么吗?若你不是很明白,请看我下面来给你分析,看完你就明白了。
因为虽然String类是引用数据类型,刚开始传进stringTest方法中的s也是指向堆内存当中的"12",但是当我们执行s = s+"123"的时候,因为String类被final修饰,所以在堆内存当中又重新创建了一个”12123“,方法中的s指向了‘12123’的堆内存中首地址,所以,当我们输出s的时候,输出的依然是之前的s的内容。
相关文章推荐
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- 【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)
- 方法的形式参数---(基本数据类型和引用数据类型作为形参)
- Java语言中,以String作为类型的变量在作为方法参数时所表现出的“非对象”的特性。
- 为什么说string是引用类型,但是又有值类型的特点呢?
- string类型在参数传递中如何作为引用,如何在函数外修改函数内的string类型
- C# 方法传参时,传入值类型、引用类型、string引用类型、ref修饰参数时分析
- c# .net 如何把byte类型仅仅转换成string而不改变其内容
- 课堂随笔02--c#中string作为引用类型的特殊性
- 关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- 为什么java中的String要设计成不能改变的类型
- java为什么不能在静态域或方法中引用类型变量?
- 6.4内部类:类作为方法的返回值类型,内部类中使用外部类的引用(或称外部类对象)
- c# 当引用类型作为方法的参数
- java 引用类型作为方法参数使用问题
- 由String作为方法参数,引起的值传递,引用传递,及StringBuffer 原文引用: http://www.cnblogs.com/zuoxiaolong/p/lang1.html ht
- C#引用类型作为方法的参数分析
- C# 值类型和引用类型 以及作为方法参数的区别
- java引用类型String作为参数的一些问题
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)