(1)移位操作
    
    >>和>>>,书中说>>符号是移位操作,并在左侧扩充符号位,而>>>是左侧补零,可实际检测中是相反的,这两个位移符号的实际作用到底是什么?(2)StringBuffer的方法    ensureCapacity(int min):改变当前StringBuffer的容量
    capacity():             返回当前StringBuffer的容量    但是当min小于16时,使用capacity()得到的是默认值(默认大小是16)
    min=17的时候,capactiy()得到的是34,这是为什么?ensureCapacity的操作到底是如何进行的?(3)Java中的传值方式     方法中参数的传递
     
     基本类型的参数:那么Java将使用pass-by-value方式(值传递),即为每个参数建立一个副本。     对象类型的参数:Java将使用pass-by-reference方式(引用传值)或称为pass-by-address方式(地址传递),传递的
                     是对象的引用副本而不是对象的副本,所以将会修改原来对象的值。     String本身也是一个对象,为什么用String做参数的时候,采用的也是值传递方式(从测试结果开是这样的),不是应该使用引用传递吗?难道因为它是一个final类?目前就这些个小问题,希望大家一起指导一下。谢谢。

解决方案 »

  1.   

    public class Main
    {
      public static void change(String str)
      {
          str = "A";
      }  public static void main(String[] args)
      {
         String str = "B";
         change(str);
         System.out.println(str);
      }
    }
    我是这样做的~
      

  2.   

    (1)我们知道,负整数在计算机中,是以其补码存放的。而且首位(第一个bit)为1.
        两个右移操作符,其区别是在负整数的右移位时,一个是左补一,一个是左补零。
         也就是说,负数的右移操作,一个结果是仍然是负数,另一个结果却变成了正数。
         实际作用,要看程序的需求,一般,底层编程的时候有可能会用到。
    (2)缓冲区的容量,是指目前缓冲区能够存放数据的多少。
         当缓冲区数据放满时,多数情况下,缓冲区都支持动态扩容滴。
         StingBuffer的ensureCapacity(int min)这个方法,只是试图将缓冲区扩容。
         而并非名为:setCapacity(int capacity),所以,并非是设置容量为某个值。
         既然是扩容,那么,所扩容量,自然要选一个比较合理的值,而非程序员设置的某个特定值。
         这样可以减少总的空间复杂度。
         至于ensureCapacity方法如何进行,楼主为何不取看看源码呢?源码已经很清楚了。
    (3)String对象作为函数的参数时,采用的确实是址传递。和是否是final类无关。
         楼主可以把你的测试代码贴出来,估计是代码理解上的问题。
      

  3.   


    你把String换成别的类看看
      

  4.   


    是这个意思吧?
    public class Main
    {
      public static void main(String[] args)
      {
         Test jack = new Test();
         Test.change(jack);
         System.out.println(jack.getA());
      }
    }class Test
    {
      private int a = 100;
      public static void change(Test jack)
      {
          jack.a = 0;
      }
      public int getA()
      {
          return a;
      }
    }
    a=0了。
      

  5.   


    (1)我想确定一下>>和>>>哪个是左补符号位,哪个是左补0
    (2)看一下这段代码,难道系统认为存放一个"\u0000"需要34个字节?为什么呢?      StringBuffer strBuff = new StringBuffer("");
          System.out.println(strBuff.capacity());
          strBuff.ensureCapacity(17);
          System.out.println(strBuff.capacity());