有什么区别
你能给我一些例子吗?
我已经编程java 2年了,显然我遇到了一个问题,我无法理解并再次区分类,引用和对象(我不明白为什么我会忘记这些概念).
让我们来解决问题,即我不确定类或引用是否相同,尽管我已经知道什么是对象.
有人能够以一种好的,可理解的和完整的方式区分什么是类,引用和对象?
我所知道的是,这个类更像是一个对象的模板(一个房子的蓝图,其中类是蓝图而房子是一个对象).
以下代码输出
[[100, 200, 300], [100, 200, 300]].
Run Code Online (Sandbox Code Playgroud)
但是,我的期望是
[[100, 200, 300], [100, 200]],
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> inner = new ArrayList<Integer>();
inner.add(100);
inner.add(200);
outer.add(inner);
outer.add(inner);
outer.get(0).add(300);
System.out.println(outer);
}
Run Code Online (Sandbox Code Playgroud) 我有类GUI,所以我可以创建这样的对象:
GUI g1 = new GUI();
Run Code Online (Sandbox Code Playgroud)
和这样的引用变量:
GUI g2;
Run Code Online (Sandbox Code Playgroud)
现在据我所知,g2是一个引用变量,它引用了GUI类,g1是GUI类的一个对象.g1和g2有什么区别?我可以使用GUI类的属性与对象,但g2的可能用途是什么?
在 C++17 标准中声明(强调我的):
“变量是由非静态数据成员或对象的引用声明引入的。变量的名称(如果有)表示引用或对象。”
来源:ISO/IEC 14882:2017 (C++17), §6/6 - “基本概念”
为什么是“如果有”?变量可以在 C++ 中省略名称吗?
如果我查看 cppreference:
“在 C++ 中,变量实际上只是为程序使用而保留的一点内存。您使用变量名来引用它,因此您无需担心它在内存中的位置(尽管您可以找到出它的内存地址,甚至可以指定它的位置,如果你愿意的话)。”
或者维基百科(我知道它不是最好的来源,但仍然很常见):
“在计算机编程中,变量或标量是一个存储地址(由内存地址标识)与相关的符号名配对,其中包含一些已知或未知的信息量,称为值。变量名是通常的方法根据上下文,除了引用变量本身之外,还引用存储的值。”
来源:https : //en.wikipedia.org/wiki/Variable_(computer_science)
这表示变量应始终提供与其关联的名称,无论引用的对象/值是否被它访问。
变量在 C++ 中是否可能没有名称?
如果是,如何以及在哪里(如果可能有多种情况)?
或者,如果我误解了某些东西,那么“如果有的话”如何解释?
有关的:
如果我这样做会发生什么:
Object obj = new Object();
obj = null;
Run Code Online (Sandbox Code Playgroud)
它是从内存中删除对象还是仅清除引用?
更正式地,考虑代码:
Object obj = new Object();
Object temp = obj;
obj = null;
Run Code Online (Sandbox Code Playgroud)
为什么temp还没有null?它不应该从记忆中删除吗?
public class TestClass
{
public int TestNumber;
public string TestName;
public TestClass(string name, int number)
{
TestName = name;
TestNumber = number;
}
}
public class AnotherClass
{
TestClass Var1, Var2;
void Start()
{
Var1 = new TestClass("Me", 1);
Var2 = Var1;
Var2.TestName = "aaa";
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试Var1.TestName我得到的值时,"aaa"但最初它是"Me". 如何将每个 var 分开但仍然Var2从 中获取其初始值Var1?
在该计划中
public static void main(String[] args){
int x = 1;
int y = 2;
int[] z = new int[]{x, y};
z[0] = 3;
System.out.println(x); //prints 1
}
Run Code Online (Sandbox Code Playgroud)
我预计会打印出3张.但是1是.为什么?我认为Java只复制引用,即当我们将refrence传递给方法时,该方法将使用对同一对象的另一个引用.它就像C++指针和原始类型.
所以我试着咨询JLS 10.6并没有找到任何有用的东西.也许我对Java中的原始类型有一些误解.你能澄清一下吗?
如果字符串对象被中断,那么为什么改变一个不会影响其他对象
public class EqualExample {
public static void main(String[] args) {
String str = new String("Hello");
String str1 = new String("Hello");
System.out.println(str == str1);
System.out.println(str1.equals(str));
}
}
Run Code Online (Sandbox Code Playgroud)
上述程序的输出将是
错误的
public class EqualExample {
public static void main(String[] args) {
String str = "Hello";
String str1 = "Hello";
System.out.println(str == str1);
System.out.println(str1.equals(str));
}
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是
的确如此
这是因为在字符串池中Heloo alredy存在所以它实际上是字符串并引用相同的对象然后为什么如果我将str1更改为"heloo java"然后为什么str仍然具有值"heloo".因为它们引用相同的对象所以str的值必须更改为public class EqualExample {public static void main(String [] args){
String str = "Hello";
String str1 = "Hello";
System.out.println(str == str1);
System.out.println(str1.equals(str));
str1="Heloo java"; …Run Code Online (Sandbox Code Playgroud) 我在Java中实现单链表,我有一个问题.除了和删除节点之外,很多人都使用这样的临时节点:
public Object removeFirst() {
Node temp = head;
head = temp.next;
Object returnData = temp.data;
temp = null;
size--;
return returnData;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个临时节点是必要的?乍一看,我认为为了删除第一个元素我必须做的就是将第二个元素更改为头节点.
所以我的问题是在java中,object= object意味着什么?继承每个字段和方法,2个对象是否完全相同?