A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓飞飞 中级黑马   /  2012-4-9 07:23  /  2644 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Book {

private String name = null;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

public class ParseHtml {


public void bookxiugai(Book book){
book = new Book();
}

public static void main(String[] args) {
ParseHtml p = new ParseHtml();
Book book = null;
p.bookxiugai(book);//方法参数是对象,按说应该是引用传递,方法的修改应该影响实际参数book,打印结果应该为非null,
System.out.println(book);

}
}

p.bookxiugai(book);//方法参数是对象,按说应该是引用传递,方法的修改应该影响实际参数book,打印结果应该为非null,可是打印却为null,为什么?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

8 个回复

倒序浏览
public class Book {    // 这里有问题哦。。

private String name = null;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

问题1. 一个java文件里面只能有一个public 声明的class,  这个我已帮你该过来
问题2,你传入了一个book引用进去,但这个book是空的,所以正确的说,你是将方法bookxiugai(Book book) 这个
里面的book设置它的引用是空,  这时你必须清楚一点,外面的book没有任何改变,即还是空的。
之后里面的book实例化了。  则里面的book不再是空,但外面的book还是空的。
     为了简单起见,你就把外面的book和里面的book当成两个不同的人,一开始外面的人住在A房子里,传参数后
   外面的那个人 使里面的那个人 也住在了A房子里,  当new操作后。里面的人就住在了B房子里,而外面的人还是
   在A房子里住。

   这里说你还不懂。我就没办法了。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
对于类中对象问题,先是默认构造函数初始化,而后是对属性进行显式初始化。对此题中Book book=null,在堆内存的位置为空,即堆内存中没有空间,而随后的p.bookxiugai(book);是new book()新建了一个对象,但是默认的构造函i数仍然显示为空,即此时输出仍为null。
回复 使用道具 举报
1:首先在几个类并列的时候只能出现一个类是public的,2:p.bookxiugai(book);只是把book指向内存的地址传给了p.bookxiugai(book);中的book,影响的只是class ParseHtml
中的book,并不会影响当前内中的book,因此此处的book依然为null
回复 使用道具 举报
class Book {

private String name = null;

public String getName() {
return name;
}

public void setName(String name) {

this.name = name;
}
}

class ParseHtml
{


public static void bookxiugai(Object book){

book = new Book();

}

public static void main(String[] args) {

//ParseHtml p = new ParseHtml();//本类的需要这样创建对象吗?直接引用不就完了嘛

Object book =null;  

bookxiugai(book);
System.out.println(book);

}
}

“里面的人就住在了B房子里,而外面的人还是
   在A房子里住。
”我还没有懂呢!!!!!!   我就知道 你给book传入了一个空值null,里面什么都没有,返回打印的不就是空值嘛,

回复 使用道具 举报
外面的那个book传入了一个空值null,方法bookxiugai(Book book) 这个里面的book设置它的引用是空,而后来又new了一个book对象,在内存中又产生了一个新的地址,但这个地址并不是旧的那个book对象的地址,所以打印出来的还是空的
回复 使用道具 举报
  1. class Book {

  2. private String name = null;

  3. public String getName() {
  4. return name;
  5. }

  6. public void setName(String name) {
  7. this.name = name;
  8. }
  9. }

  10. class ParseHtml {


  11. public Book bookxiugai(Book book){
  12. book = new Book();
  13. return book;
  14. }

  15. public static void main(String[] args) {
  16. ParseHtml p = new ParseHtml();
  17. Book book = null;
  18. Book i;
  19. i = p.bookxiugai(book);//方法参数是对象,按说应该是引用传递,方法的修改应该影响实际参数book,打印结果应该为非null,
  20. System.out.println(i);
  21. }
  22. }
复制代码
外边的book只是负责传值进去,如果你想实现把book值传出来,把bookxiugai(book);这个方法改成有返回值的。然后再用book接收,我为了区分又定义了一个Book变量i.代码如下:
回复 使用道具 举报
pray 高级黑马 2014-4-26 07:02:39
8#
真乃神人啊!楼主的帖子实在是光彩夺目。子曰:三人行而必有我师焉。斯言善哉。不知不觉上网这么多年,好的坏的PP都看过了,看多了。渐渐的也觉得没什么意思了。渐渐觉得自己已经达到奋斗的顶峰了。可是,第一眼看到楼主浅笑嫣然的时候,我的眼前竟然感觉一亮!仿佛看到了倾城倾国的美人,正轻摇柳步款款而行。正好似楼主的外表,相貌端正,天庭饱满。好片啊!只有那种真理在握,洞视这个世界真实本质的人,才能显示出这样惊人的魅力。在日益苍白肤浅的网络里,我从楼主的PP中不但看到了美丽,更加看到了网络的希望。为表达我对楼主的敬意,也是为了向楼主学习。我决心要把这个帖子顶上去!
回复 使用道具 举报
看都不大懂 还需要学习啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马