String s = "hello";和String s = new String("hello");有什么区别?
String s = "hello";是在栈中还是堆中?为什么这样赋值以后在传值时不改变s的内容?
谢谢了

解决方案 »

  1.   

    自己在CSDN里面搜一下关于STRING的问题这个已经是月经帖了。。
      

  2.   

    自己在CSDN里面搜一下关于STRING的问题
      

  3.   

    new是在堆上分配的,否则是在栈上分配的
      

  4.   

    Java本来是纯面向对象的,但是为了编程的方便以及实现一些接近底层的东西,把有些基本数据类型用C的方式写了一下,比如int对应Integer类等
      

  5.   

    以前也看到有引用传递和值传递一说,但刚刚根据各位所说,运行了看下,都没改变么为什么呢public class Drink {
    void Bear(String str){
    str = "Oh no i'm bear now";
    }
    void check(){
    String s = "I am coffee";
    String t = new String("I am milk");
    Bear(s);
    System.out.println(s);
    Bear(t);
    System.out.println(t);
    }
    public static void main(String[] args){
    Drink d = new Drink();
    d.check();
    }
    }
      

  6.   

    Output:
    I am coffee
    I am milk
      

  7.   

    有new关键字就要开辟堆内存,String有个重要的特点就是值不可变,按照划分的话属于按值传递,但是划分没有多大的意思,因为不是引用传递,所以在赋值以后再传值内容不会发生改变。
      

  8.   

    你只要记住JAVA中字符串是不可变的就行啦!String不是一个类型,而是一个类
    而且是最终类,public final class String 所以它的一个引用一定是指向String而不可能是子类想要可变的字符串用StringBuffer