老师,为啥我输出的值是Null

老师,为啥我输出的值是Null

老师,为什么输出员工信息时,部门信息会是Null,检查了好几次还是没找到问题点,但是能在部门类的方法体中能输出相应的值(也就是已经赋值成功了,但输出员工信息还是Null); 


另外想知道 == 和 equals的区别在哪,在有些循环结构中 equals("y")和== y的效果不同。


package com.imooc.company;

//职务类

public class Post {

//成员属性:职务编号,职务名称

}


package com.imooc.company;

//部门类

public class Branch {

//成员属性:部门编号,部门名称,员工数组,员工人数

private String braNo;//部门编号

private String braNa;//部门名称

private Staff[] braPes;//员工数组

private Staff braPe;//员工类

private int braNu;//员工人数

//无参构造

public Branch(){

}

//带参构造 内容有:部门编号,名称

public Branch(String braNo,String braNa){

this.setNo(braNo);

this.setNa(braNa);

}

//带参构造 内容有:部门编号,名称,员工数组,员工人数

public Branch(String braNo,String braNa,Staff[] braPes,int braNu){

this.setNo(braNo);

this.setNa(braNa);

this.setPes(braPes);

this.setNum(braNu);

}

//set,get方法

//部门编号

public void setNo(String braNo){

this.braNo=braNo;

}

public String getNo(){

return this.braNo;

}

//部门名称

public void setNa(String braNa){

this.braNa=braNa;

}

public String getNa(){

return this.braNa;

}

//员工数组

public void setPes(Staff[] braPes){

this.braPes=braPes;

}

//如果员工数组内部无空间时,将定义空间

public Staff[] getPes(){

if(this.braPes == null)

this.braPes=new Staff[10];

return this.braPes;

}

//计数

public void setNum(int braNu){

this.braNu=braNu;

}

public int getNum(){

return this.braNu;

}

//员工类

public void setPe(Staff braPe){

this.braPe=braPe;

}

public Staff getPe(){

if(this.braPe == null)

this.braPe=new Staff();

return this.braPe;

}

//统计员工

public void infoNum(Staff bra){

for(int i=0;i<this.braPes.length;i++){

if(this.getPes()[i] == null){

braPe.setBra(this);

this.getPes()[i]=bra;

this.braNu=i+1;

return;

}

}

}

public String infoS(){

String str="ss:"+this.getNa()+"sa:"+this.getNum();

return str;

}

}


package com.imooc.company;

//员工类

public class Staff {

//成员属性:姓名,工号,性别,年龄,所属部门,职务信息

private String name;//姓名

private String workNo;//工号

private String sex;//性别

private int age;//年龄

private Branch workBra;//所属部门

private Post workPost;//职务信息

//无参构造

public Staff(){

}

//带参构造 内容有:员工姓名,工号,性别,年龄

public Staff(String name,String workNo,String sex,int age){

this.setName(name);

this.setNo(workNo);

this.setSex(sex);

this.setAge(age);

}

//带参构造 内容有:员工姓名,工号,性别,年龄.部门,职位

public Staff(String name,String workNo,String sex,int age,Branch workBra,Post workPost){

this.setName(name);

this.setNo(workNo);

this.setSex(sex);

this.setAge(age);

this.setBra(workBra);

this.setPost(workPost);

}

//set/get方法

//名字

public void setName(String name){

this.name=name;

}

public String getName(){

return this.name;

}

//工号

public void setNo(String workNo){

this.workNo=workNo;

}

public String getNo(){

return this.workNo;

}

//性别

//性别只能为男女,否则为男

public void setSex(String sex){

if(sex!="男" && sex!="女")

this.sex="男";

else

this.sex=sex;

}

public String getSex(){

return this.sex;

}

//年龄

//年龄为18-65岁之间,否则为18岁

public void setAge(int age){

if(age<18 || age>65)

this.age=18;

else

this.age=age;

}

public int getAge(){

return this.age;

}

//所属部门

public void setBra(Branch workBra){

this.workBra=workBra;

}

public Branch getBra(){

if(this.workBra == null)

this.workBra=new Branch();

return this.workBra;

}

//职务信息

public void setPost(Post workPost){

this.workPost=workPost;

}

public Post getPost(){

if(this.workPost == null)

this.workPost=new Post();

return this.workPost;

}

//显示员工信息

public String infoMa(Branch workBra){

String str="姓名:"+this.name+"\n工号:"+this.workNo+"\n性别:"+this.sex+"\n年龄:"+this.age+"\n职务:"+this.getBra().getNa()+""+this.getPost();

return str;

}

}


package com.imooc.company;



//测试用

public class WorkTest {


public static void main(String[] args) {

//员工类赋值

Staff st=new Staff("张铭","S001","男",29);

Branch br=new Branch("人事部","D001");

br.setPe(st);

//员工类1赋值

Staff st1=new Staff();

st1.setName("李艾爱");

st1.setNo("S002");

st1.setSex("女");

st1.setAge(21);

//员工类2赋值

Staff st2=new Staff();

st2.setName("孙超");

st2.setNo("S003");

st2.setSex("男");

st2.setAge(29);

//员工类3赋值

Staff st3=new Staff();

st3.setName("张美美");

st3.setNo("S004");

st3.setSex("女");

st3.setAge(26);

//员工类4赋值

Staff st4=new Staff();

st4.setName("蓝迪");

st4.setNo("S005");

st4.setSex("男");

st4.setAge(37);

//员工类5赋值

Staff st5=new Staff();

st5.setName("米莉");

st5.setNo("S006");

st5.setSex("女");

st5.setAge(24);

System.out.println(st2.infoMa(br));

System.out.println(br.infoS());

System.out.println();


}


}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕小班 2020-09-08 10:56:06

同学你好,1、同学这样理解==和equals是可以的。

    2、对于Staff中infoMa方法,this.getBra().getNa()是获取到当前对象的workBra属性。但是在测试类中,并没有对当前Staff对象的workBra属性赋值,所以获取当前对象的workBra属性为空。

可以在测试类,Staff员工对象中设置部门属性,此时就可以通过this.getBra()获取到部门属性workBra。比如:

http://img1.sycdn.imooc.com//climg/5f56f09c09d2f58805240282.jpg

同学可以再来复习一下课程呐,在构造方法中对这个属性的赋值,比如:

http://img1.sycdn.imooc.com//climg/5f56f28809d3ec5a10780338.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

提问者 慕哥8310336 2020-09-07 20:47:26

老师,您这段回答我有点不理解的一点是,为啥在学生管理系统中,用this.get专业类在调用专业类中的专业名可以获取到值,但是为啥在我的这段代码中,用this.get部门类在调用部门类中的部门名却是没法获取到值。存储机制不都差不多嘛?http://img1.sycdn.imooc.com//climg/5f562aca09c3c99312400371.jpg

好帮手慕小班 2020-09-07 13:47:23

同学你好,非常抱歉没有回复同学关于equals和==的比较,同学可以参考如下内容理解:

1、对象之间的“==”比较是比较它们的内存地址是否相同;
     基本数据类型的“==”比较的是值。
2、 Object类中的equals方法,默认比较的是两个对象的地址;
       重写equals方法后,比较的是这两个对象中的内容。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 慕哥8310336 #1
    也就是说,==比较对象时,它只会比较对象的内存地址,而对象当中的值是不会做比较的,当对象的内存地址是相同时,不管内存地址的对象值是怎样,最终的返回值是true。 而equals方法比较对象的是地址内部的值,当如果其中的一个值不同时,则返回是false,当所有值相同时,返回才是true对吗,老师
    2020-09-07 20:40:14
好帮手慕小班 2020-09-07 12:12:21

同学你好,同学是想说输出的st.infoMa(br)中部门为null吧,这是因为在infoMa中,需要注意输出传入参数的workBra的braNa属性,比如:

http://img1.sycdn.imooc.com//climg/5f55b25c09b5a43615470224.jpg

另外

    1、部门中传入参数的顺序为部门编号,名称,比如:

http://img1.sycdn.imooc.com//climg/5f55b2b409bd181e04330054.jpg

    2、部门类的统计变量与数组设置一个就可以,而具体是市场部还是人事部,是通过部门类的对象来表示的,如果是市场部的对象,那么添加并统计的就是市场部的人数,同样如果是人事部的对象,添加并统计的就是人事部的人数。建议同学可以再复习一下封装综合案例。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 慕哥8310336 #1
    那equals和==呢
    2020-09-07 13:18:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师