Java基础问题

jackxu1982 2009-07-15 10:35:14
(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类?

目前就这些个小问题,希望大家一起指导一下。谢谢。
...全文
59 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackxu1982 2009-07-15
  • 打赏
  • 举报
回复
大家帮忙指导一下啊,谢谢了~
jackxu1982 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 knightzhuwei 的回复:]
引用 5 楼 jackxu1982 的回复:
引用 4 楼 knightzhuwei 的回复:
引用 2 楼 jackxu1982 的回复:
引用 1 楼 knightzhuwei 的回复:
引用楼主 jackxu1982 的帖子:
String本身也是一个对象,为什么用String做参数的时候,采用的也是值传递方式(从测试结果开是这样的)


你怎么测试的?


Java code
public class Main
{
public static void change(String str)
{
str = "A";
}

publ…
[/Quote]

这个测试哪里有问题呢?
jackxu1982 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 preferme 的回复:]
(1)我们知道,负整数在计算机中,是以其补码存放的。而且首位(第一个bit)为1.
两个右移操作符,其区别是在负整数的右移位时,一个是左补一,一个是左补零。
也就是说,负数的右移操作,一个结果是仍然是负数,另一个结果却变成了正数。
实际作用,要看程序的需求,一般,底层编程的时候有可能会用到。
(2)缓冲区的容量,是指目前缓冲区能够存放数据的多少。
当缓冲区数据放满时,多数情况下,缓…
[/Quote]

(1)我想确定一下>>和>>>哪个是左补符号位,哪个是左补0
(2)看一下这段代码,难道系统认为存放一个"\u0000"需要34个字节?为什么呢?

StringBuffer strBuff = new StringBuffer("");
System.out.println(strBuff.capacity());
strBuff.ensureCapacity(17);
System.out.println(strBuff.capacity());

knightzhuwei 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jackxu1982 的回复:]
引用 4 楼 knightzhuwei 的回复:
引用 2 楼 jackxu1982 的回复:
引用 1 楼 knightzhuwei 的回复:
引用楼主 jackxu1982 的帖子:
String本身也是一个对象,为什么用String做参数的时候,采用的也是值传递方式(从测试结果开是这样的)


你怎么测试的?


Java code
public class Main
{
public static void change(String str)
{
str = "A";
}

public static void main(String[] ar…
[/Quote]

你觉得你2楼和5楼做的是同样性质的测试么?
jackxu1982 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 knightzhuwei 的回复:]
引用 2 楼 jackxu1982 的回复:
引用 1 楼 knightzhuwei 的回复:
引用楼主 jackxu1982 的帖子:
String本身也是一个对象,为什么用String做参数的时候,采用的也是值传递方式(从测试结果开是这样的)


你怎么测试的?


Java code
public class Main
{
public static void change(String str)
{
str = "A";
}

public static void main(String[] args)
{
String str = "B";…
[/Quote]

是这个意思吧?


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了。
knightzhuwei 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackxu1982 的回复:]
引用 1 楼 knightzhuwei 的回复:
引用楼主 jackxu1982 的帖子:
String本身也是一个对象,为什么用String做参数的时候,采用的也是值传递方式(从测试结果开是这样的)


你怎么测试的?




Java code
public class Main
{
public static void change(String str)
{
str = "A";
}

public static void main(String[] args)
{
String str = "B";
change(str);
System.ou…
[/Quote]

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


你怎么测试的?
[/Quote]


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);
}
}


我是这样做的~
knightzhuwei 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 jackxu1982 的帖子:]
String本身也是一个对象,为什么用String做参数的时候,采用的也是值传递方式(从测试结果开是这样的)[/Quote]

你怎么测试的?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧