String 作为形参的问题

来源:互联网 发布:如何做好淘宝客服主管 编辑:程序博客网 时间:2024/04/29 08:38

在方法内部对String类型的变量的重新赋值操作并没有对这个变量的原型产生任何影响。?

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

当方法传入的参数为非基本类型时(也就是说是一个对象类型的变量),方法改变参数变量的同时变量原型也会随之改变:

String的问题所在:

字符串直接赋值时,String类型的变量所引用的值是存储在类的常量池中的。因为”original”本身是个字符串常量,另一方面String是个不可变类型,所以这个String类型的变量相当于是滴对一个常量的引用。这种情况下,变量的内存空间大小是在编译期就已经确定的。

而new对象的方式是将”original”存储到String对象的内存空间中,而这个存储动作是在运行期进行的。在这种情况下,Java并不是把”original”这个字符串当作常量对待的,因为这时它是作为创建String对象的参数出现的。

别人:

源代码中String 是根据char[] 来进行操作的,因此 其实使用的是基本类型传递了。(Integer 等也有此情况)

public  String(String original) {

        int size = original.count;

        char[] originalValue = original.value;

        char[] v;

。。。。。。。。

我认为

 例子:

public class Mytest{

 public static void main(String args[]){

Mytest m = new Mytest();
  number b=new number();
  m.change(b);
  System.out.println(b.a);

}

public void  change(number b){
  number c= new number(3,5);
  b=c;
  System.out.println(b.a);
 }
 }

class number{
 int a=1;
 int b=2;
 public number(int a,int b){
  this.a=a;
  this.b=b;
 }
 public number(){
  
 }
}

这里输出的是:

可以这样理解:3,1  我们看到 形参中的值改变了,但是main中实参的值没有改变。 原因便是:在方法中形参的引用 改变了。而不是引用的值改变了。

String也是类似的,我们改变了String的引用,这时已经形参实参脱轨了,所以形参的改变都不会对应到实参。 本质原因:没有改变里面对应的值

0 0
原创粉丝点击