记Java对象初始化产生的问题

问题描述

背包、队列和栈_qq_45666842的博客-CSDN博客

在用Stack类(栈,栈是一种数据类型,详细介绍见上方链接)创建一个字符串的容器时,输出时总会输出null值。

/**
*下方是一个十进制转二进制的类的方法
*但是输出结果总是后缀null值
*/
public class BinaryOperation {
	
	
    public static Stack<Integer>  binayoperation(int i) {
	   Stack<Integer> stack = new Stack<Integer>();
	   while(i>0) {
		  stack.push(i%2);
		  i/=2;
	   }
	   return stack;
	}
	public static void main(String[] args) {
		Stack<Integer> stk = binayoperation(50);
		
		for(Integer n:stk) {
			System.out.print(n);
		}

	}

}

输出结果如下 

 思考了好久,终于发现是创建的Stack<Item>类中成员变量的初始化问题导致的,有问题的Stack源码如下

public class Stack<Item> implements Iterable<Item>{
	
    //private Node node = new Node();//该链表对象的初始化是问题的根源,不应该初始化
	ptivate Node node;
    private int N;
	
//往Stack栈中添加元素的方法push
	void push(Item item) {
		Node oldNode = node;
		node = new Node();//node对象已经被创建出来,所以只需重新赋值即可,不可重新创建对象
		node.item = item;
		node.next = oldNode;
		N++;

	}
//从Stack栈中删除并返回元素的方法pop	
	Item pop() {

			Item item = node.item;
			node = node.next;
			N--;
			return item;

	}
//  栈中是否有元素
	boolean isEmpty() {
		return(N==0);
	}
//栈中元素的个数
	int size() {
		return N;
	}
	

	
//链表
	class Node {

		Item item;

		 Node next;
	
	}

//迭代器的实现
	public Iterator<Item> iterator(){
		return  new ListIterator();
	}
	private class ListIterator implements Iterator<Item>{

		private Node current = node;
		public boolean hasNext() {return current!=null;}
		public Item next() {
			Item item=current.item;
			current = current.next;
			return item;
			
		}
		public void remove() {}
	}

 Node类的对象有两个成员变量,一个是item,一个是next

	class Node {

		Item item;
		Node next;
	
	}

 当只创建Node类的对象node,而不初始化时,node为null。

Node node;

但是当创建了Node类的对象并且初始化后,内存为node分配了空间存放其item,next成员

由此可见,虽然其item,next都为null,但是node本身时存在的,可以被处理输出。

 链表中仅有两个值,却有三个节点。因此,在本例中,对象应该先创建,需要时再初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值