又过了一段时间,最近也在学javaweb,听我们学校的学长说学校不会教我们前端方面的课程的,所以还是得自学,目前是大一结束后的暑假,因为最近想巩固一下javase的知识,就想着和b站的教程敲一遍贪吃蛇,所以才遇到了以下的问题
正确代码(教程里的):
private Node[] body = {
new Node(140, 100),
new Node(120, 100),
new Node(100, 100)
};
public Node getNewHead() {
//上1,下3,左2,右0
Node newNode = new Node(140, 100); //此处出现的问题
switch (this.direction) {
case 0:
newNode.setX(body[0].getX() + 20);
newNode.setY(body[0].getY());
break;
case 1:
newNode.setX(body[0].getX());
newNode.setY(body[0].getY() - 20);
break;
case 2:
newNode.setX(body[0].getX() - 20);
newNode.setY(body[0].getY());
break;
case 3:
newNode.setX(body[0].getX());
newNode.setY(body[0].getY() + 20);
break;
}
return newNode;
}
错误代码(自己跟着写的):
private Node[] body = {
new Node(140, 100),
new Node(120, 100),
new Node(100, 100)
};
public Node getNewHead() {
//上1,下3,左2,右0
Node newNode = body[0]; //此处出现的问题
switch (this.direction) {
case 0:
newNode.setX(body[0].getX() + 20);
newNode.setY(body[0].getY());
break;
case 1:
newNode.setX(body[0].getX());
newNode.setY(body[0].getY() - 20);
break;
case 2:
newNode.setX(body[0].getX() - 20);
newNode.setY(body[0].getY());
break;
case 3:
newNode.setX(body[0].getX());
newNode.setY(body[0].getY() + 20);
break;
}
return newNode;
}
导致的结果就是,贪吃蛇的头会随着界面的刷新而消失,最终只会留下一格身体,当时就好奇为什么会这样,百度也没有什么确切的答案
就想会不会是因为创建对象和直接赋值导致的,最终在网上找到关于String创建对象赋值和直接赋值的区别,本着差不多的想法,做了如下总结:
通过构造方法创建的字符串对象是在堆内存,通过赋值创建的字符串对象是在方法区的常量池
也许就是这样的原因导致贪吃蛇出现的问题,此博客只用来记录遇到的问题,方便回过头来解决