我有这个代码.但我不知道如何解释结果:
ArrayList<String> first = new ArrayList<String>();
first.add("1");
first.add("2");
first.add("3");
ArrayList<String> second = new ArrayList<String>();
second = first;
System.out.println("before modified:"+second.size());
second.clear();
System.out.println("after modified:");
System.out.println(" First:"+first.size());
System.out.println(" Second:"+second.size());
Run Code Online (Sandbox Code Playgroud)
结果将是:3/0/0
我不知道的问题是:当你分配时first = second;,第一个和第二个数组都将指向同一个对象(1,2和3).之后你clear上第二阵列的所有元素,所以第二阵列和这些对象之间的所有引用将(这里没问题)松动.
我不知道的是:但是这些对象(1,2和3)仍然引用第一个数组.为什么第一个数组的大小为0.
请解释一下.
谢谢 :)
我正在编写一个基本的Java国际象棋游戏,并编写了以下类:游戏,玩家,棋盘,广场,棋子(每个特定棋子的超类),以及每个特定棋子类(例如Pawn,Knight,Bishop等. )
其中一个棘手的方法是根据是否导致移动的玩家受到检查来确定移动是否有效.我的解决方案如下:
我正在考虑如何从这里克隆: http://www.jusfortechies.com/java/core-java/cloning.php
现在,board对象由2d Square对象组成.每个方形对象都有一个零件字段,该字段为空(在其上没有任何部分)或引用一个部件对象(在其上有一个部分).Board对象还有一个whiteKingSquare和一个blackKingSquare(都是Square对象),可以更快/更容易地定位白王或黑王.
我在Board课程中编写了以下方法:
public Object clone() throws CloneNotSupportedException {
Board clonedBoard = (Board) super.clone();
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
clonedBoard.myBoard[i][j] = new Square(this, i, j);
clonedBoard.whiteKingSquare = myBoard[7][4];
clonedBoard.blackKingSquare = myBoard[0][4];
}
}
return clonedBoard;
}
Run Code Online (Sandbox Code Playgroud)
但是,因为Board指的是一个8 x 8的Square对象数组,所以我必须克隆它们中的每一个.我在Square类中编写了这个方法:
public Object clone() throws CloneNotSupportedException {
return (Square) super.clone();
}
Run Code Online (Sandbox Code Playgroud)
最后,我在Piece类中编写了这个方法:
public Object clone() throws CloneNotSupportedException …Run Code Online (Sandbox Code Playgroud) 这是我的示例对象
object name: OBJ
object properties: String name, int age
现在我有2个全球名单
List<OBJ> lstobj = new ArrayList<OBJ>;
List<OBJ> anotherlist = new ArrayList<OBJ>;
Run Code Online (Sandbox Code Playgroud)
然后我在这两个列表中添加了一些记录
Name:Ben Age:5
Name:Charles Age: 6
Name:Dan Age:7
现在我需要将查尔斯的年龄改为"10"
首先,我应该在列表中找到Charles并从列表中获取obj
OBJ newobj = new OBJ;
for(OBJ obj : lstobj){
if(obj.getName.equals("Charles"){
newobj = obj;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要将检索到的obj的年龄设置为10.
newobj.setAge(10);
此操作不仅会更改"lstobj",还会更改"其他列表".如何在不影响两个全局列表的情况下设置检索到的obj?
我不完全理解Java何时传递副本/值以及何时传递"引用"(指针).
我正在尝试分配我拥有的静态对象的副本,但我不确定如何去做.
我有这个:
static ArrayList<MyObject> myObjects;
Run Code Online (Sandbox Code Playgroud)
我想获得myObjects的副本,以便我可以在不影响原始值的情况下使用值.当我使用这样的getter时它是否传递引用或副本/值:
public static ArrayList<MyObject> getMyObject()
{
return ThisClass.myObjects;
}
Run Code Online (Sandbox Code Playgroud)
那回报是什么?如果是参考,我怎样才能获得副本?
我见过这些:
但我仍然不太明白我会得到什么.
我有一个对象类型为"对象"的成员:
class MyObject{
Object member;
public Object getObject(){
return member;
}
public void setObject(Object obj){
member = obj;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以深层复制MyObject?
我不确定自己的头衔是否明确。在Swift中,我有这个结构。
struct Movement {
let name: String
var reps: Int
}
let movement1 = Movement(name: "Push Ups", reps: 20)
var movementA = movement1
movementA.reps = 30
print(movement1.reps) // Prints 20
print(movementA.reps) // Prints 30
Run Code Online (Sandbox Code Playgroud)
Kotlin(或Java)中的替代方法是什么?问题是在我的应用程序中,我的锻炼包含多个动作。我将这些动作附加到MutableList上,并且在进行重复动作的锻炼时出现问题。
例如,当我想输入锻炼内容时:
20俯卧撑
30个引体向上
40俯卧撑
我最终得到:
40俯卧撑
30个引体向上
40俯卧撑
首先,我选择运动#1并设置运动#1的代表,但是当我选择运动#3并设置运动#3的代表时,它将覆盖运动#1的变量。
任何的想法?
我已经尝试过类似的方法,但是没有用。
class Movement(name: String) {
var reps: Int? = null
}
val movement1 = Movement("Push Ups")
movement1.reps = 20
var movementA = movement1
movementA.reps = 30
Log.i("REPS1: ", movement1.reps.toString()) // 30
Log.i("REPSA: ", movementA.reps.toString()) // …Run Code Online (Sandbox Code Playgroud) 我正在使用Windows 7上的Eclipse中的粒子引擎,我遇到了一个我从未见过的问题.我的代码中有这个:
float start = startPosition.getY();
p.position.addTo(p.moveVector);
float end = startPosition.getY();
if(start != end){
System.out.println("hit");
}
Run Code Online (Sandbox Code Playgroud)
它经常打印.我这样做的原因是因为startPosition正在改变,它搞砸了我的程序.
我也进入调试器并查看打印机命中时的值,我得到了这个结果,所有变量都在位置和moveVector:1.0E-5我不知道该怎么做.
这是我的代码.
粒子发射器http://tinyurl.com/9ahwodx
矢量3f http://tinyurl.com/9do6v2k
有问题的代码位于ParticleEmitter的底部.
如果你想看到或知道别的什么让我知道,但我认为这是所有相关的信息.
克隆对象上的任何更改都会反映原始对象吗?请任何人解释 clone() 方法在内部是如何工作的。
我有许多函数将全局ArrayList作为参数,其中一些不对此列表进行任何更改,而其他函数需要在工作时删除此数组的某些元素,因此我在这些函数中创建了一个本地tempArrays.
static ArrayList array1 = new ArrayList();
public fn1(ArrayList array1)
{
ArrayList tempArray1 = new ArrayList();
tempArray1 = array1;
tempArray1.remove(elemnt);
}
Run Code Online (Sandbox Code Playgroud)
问题是删除的元素也从原始arrayList中删除array1,我不知道为什么?.
谢谢..
我想复制一个数组.通常,我会做这样的事情.
int[] a1 = {1, 2, 3};
int[] a2 = a1
Run Code Online (Sandbox Code Playgroud)
最近,我看到我的教授这样做:
int[] ar1 = {1, 2, 3};
int[] ar2 = Arrays.copyOf(ar1);
Run Code Online (Sandbox Code Playgroud)
这样做比另一种方式有优势吗?主要区别是什么?
我正在使用一个类并使用它作为输入来调用这个类。
professor = new Professor(EEEE, AAAA, YEARS_90, DEP);
depProf.addProfessor(professor)
Run Code Online (Sandbox Code Playgroud)
教授有一个 (String, String, Integer, String) 的构造函数,但在测试中我想从另一个地方用(Professor)作为输入调用它。
public Professor(String name, String surname, Integer yearOfBirth, String department) {
this.department = department;
Person curPerson = new Person(name, surname, yearOfBirth);
}
Run Code Online (Sandbox Code Playgroud)
如何制作教授(教授)的构造函数?如果这有任何意义。
我正在考虑在调用第二个构造函数时调用第一个构造函数,但实际上不知道如何使其工作。
我在这段代码的评论中解释了我的问题.编译器抱怨root没有初始化,但是我在构造函数的括号中初始化它.如果我也使用了initialization list,那么我会将它初始化两次而不是一次?如何正确设计?
tree.h中
class Tree
{
public:
Tree();
~Tree();
private:
struct Node
{
Node(int i);
int i;
};
Node root;
};
Run Code Online (Sandbox Code Playgroud)
Tree.cpp
#include "Tree.h"
Tree::Tree() // <---- Complains that root isn't initialized
/* An initialization list here fixes the problem, however
* that wouldn't be convinient because I need to calculate the arguments of
* the Node first... So if I used both an initializer list here
* and then I also initialize the …Run Code Online (Sandbox Code Playgroud)