(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类?目前就这些个小问题,希望大家一起指导一下。谢谢。
>>和>>>,书中说>>符号是移位操作,并在左侧扩充符号位,而>>>是左侧补零,可实际检测中是相反的,这两个位移符号的实际作用到底是什么?(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类?目前就这些个小问题,希望大家一起指导一下。谢谢。
{
public static void change(String str)
{
str = "A";
} public static void main(String[] args)
{
String str = "B";
change(str);
System.out.println(str);
}
}
我是这样做的~
两个右移操作符,其区别是在负整数的右移位时,一个是左补一,一个是左补零。
也就是说,负数的右移操作,一个结果是仍然是负数,另一个结果却变成了正数。
实际作用,要看程序的需求,一般,底层编程的时候有可能会用到。
(2)缓冲区的容量,是指目前缓冲区能够存放数据的多少。
当缓冲区数据放满时,多数情况下,缓冲区都支持动态扩容滴。
StingBuffer的ensureCapacity(int min)这个方法,只是试图将缓冲区扩容。
而并非名为:setCapacity(int capacity),所以,并非是设置容量为某个值。
既然是扩容,那么,所扩容量,自然要选一个比较合理的值,而非程序员设置的某个特定值。
这样可以减少总的空间复杂度。
至于ensureCapacity方法如何进行,楼主为何不取看看源码呢?源码已经很清楚了。
(3)String对象作为函数的参数时,采用的确实是址传递。和是否是final类无关。
楼主可以把你的测试代码贴出来,估计是代码理解上的问题。
你把String换成别的类看看
是这个意思吧?
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了。
(1)我想确定一下>>和>>>哪个是左补符号位,哪个是左补0
(2)看一下这段代码,难道系统认为存放一个"\u0000"需要34个字节?为什么呢? StringBuffer strBuff = new StringBuffer("");
System.out.println(strBuff.capacity());
strBuff.ensureCapacity(17);
System.out.println(strBuff.capacity());