RT貌似java操作这两种数据都用 new的对吗?

解决方案 »

  1.   

    还有,java不能使用 引用 作为函数形参? 最近刚看java,学习中
      

  2.   

      引用不能作为函数形参?那java能做什么呢 ,你刚刚学java,但你注意main方法没?public static void main(String args[]) 这里面的参数不是引用类型(除基本类型(byte、short、int、long、float、double、boolean)以外的类型)吗。
      

  3.   


    【说错的话,请指出,谢谢】一些被标注为final的类型,可以将引用作为形参传入 比如下面的代码public class Test { private static void test(String s) {
    s = s.concat("123");
    }

    private static void test2(StringBuilder sb) {
    sb.append("123");
    }

    public static void main(String[] args) {
    String t = "hello";
    test(t);
    System.out.println(t);

    StringBuilder sb = new StringBuilder("hello");
    test2(sb);
    System.out.println(sb.toString());
    }
    }
    输出结果是
    hello
    hello123因为String是final的,不可被修改,所以传入函数后不能修改,无法影响到函数外部
    StringBuilder则不同,函数内部对它的修改会直接影响到堆中的对象
      

  4.   

    java每实例化一个对象,将其放在一个堆里面;
    堆是栈的一个单元,数组在内存里面是一个栈,实例化一个数组就是实例化多个堆放入一个栈里面。
      

  5.   


    你这个例子我说什么好……    private static void test(String s) {
            s = s.concat("123");
        }
        
        private static void test2(StringBuilder sb) {
            sb.append("123");
        }一个是用 “=” 直接改变了引用指向的对象
    一个是调用了某引用的方法,改变其指向的对象的某个属性
    这个能比的嘛?
      

  6.   

    String a = "aaa";
    楼主这时候a对象是在栈中 
    http://blog.csdn.net/mengxiangyue/article/details/6816186
    楼主看看会对你有帮助的
      

  7.   


    你自己试一下把你的函数改成如下之后的结果,再考虑下你的这个例子举的是否恰当    private static void test(String s) {
            s = null;
        }
        
        private static void test2(StringBuilder sb) {
            sb = null;
        }java 方法的参数传递进去的是引用值
    在函数内部如果让引用重新指向另一个对象
    是不会改变原引用指向的对象的但是如果你改变的是原引用指向的对象的属性的话,
    这个对象属性上的变化肯定会保留下来的Sting 没法在不改变指向对象的情况下改变其“字符串值”属性的原因是:
    Sting 类没有提供一个改变其“字符串值”属性的方法
      

  8.   

    以上例子完全说明不了什么,String和stringbuffer或者stringbuilder这些都只不过是javase中api一个区别的知识点,感觉有点答非所问
    http://zhanhao.iteye.com/blog/1174430这个链接可以看看,对堆栈解说的比较详细
      

  9.   

    那为何 普通的整形变量 不是用new? 而数组和 类(class)是用new?难道普通整形变量就不托管了?
      

  10.   

    String类不能改变字符串的值是因为在String类的定义中,char[]字符数组被定义为final
      

  11.   


    char[] 为 final
    不代表 这个 char 数组的每一个元素都是 final
    虽然不能改变 char[] 的值
    但是可以改变每个 char 的值
    如果 java 愿意
    完全可以提供一个 api 来依次改变这个 char[] 中每一个 char 的值
    下面的语句是完全合法的:
    final char[] value = new char[10];
    value[0] = 'a';
    value[0] = 'b';