问:
int a = 1;
Integer b = new Integer(1);
System.out.println(a==b);
结果为什么是true
但是
String c = "abc";
String d = new String("abc");
System.out.println(c == d);
结果就是false了?
请说一下具体的原因
答:
==在java中的作用是比较,比较的是左右两个操作数的“直接值”,所谓直接值,对基本类型而言就是其值本身,比如int a = 1,就是1;对引用类型而言,就相当于“内存地址”,引用对象内部所包含的内容(比如String的字符串)不是它所关心的。
Integer对象有在一定范围内自动拆箱概念,为什么会自动拆箱,可能认为这类数值型对象更多的使用价值是其数值内容,而非对象地址,为更实际方便使用。
String
对象有intern(internalize)概念,是为了节省空间,同样内容的String对象只需一个内存实例即可,防止堆中出现过多相同内容的
String对象造成使用上的浪费。String c = "abc"; 这样定义是liternal string,天生就是interned的。
http://topic.csdn.net/u/20120515/09/429f3b13-ec97-41ba-a869-9ef831e2d1d4.html?seed=577676173&r=78564159#r_78564159
分享到:
相关推荐
- **引用传递**:对于引用类型,传递的是对象引用的一个副本,这意味着方法获得的是对象在内存中的地址的一个拷贝。因此,即使在方法中修改引用所指向的对象(例如,修改`StringBuffer`的内容),原始引用也会受到...
当一个引用类型的值被赋给另一个变量时,实际上是复制了这个引用地址,而不是对象本身。因此,两个变量都指向堆内存中的同一个对象,如果改变其中一个变量的属性,另一个也会受到影响,因为它们共享同一块内存。 ...
值引用是指当一个变量被赋值给另一个变量时,实际上是将原变量的值复制给新变量。这意味着修改新变量不会影响到原变量的值。 ##### 2.2 示例 考虑以下Java代码片段: ```java int i = 1; int j = i; // 此处进行...
引用在LabVIEW中的基本理解是,它是一个指向内存中特定数据位置的指针。当你创建一个引用时,你不是创建数据的副本,而是创建了一个指向原始数据的链接。这意味着对引用的任何更改都会直接影响到原始数据,从而节省...
- `==`用于比较两个变量的值是否相等,适用于基本数据类型,对于引用类型则是比较两个引用是否指向同一个对象。 - `equals()`是Object类的方法,用于比较两个对象的内容是否相等。子类通常会重写此方法以实现特定...
2. **引用类型**:当传递引用类型时,实际上是传递了一个指向对象的引用,而非对象本身,这被称为“传引用”。 #### 三、传值详解 对于基本类型来说,当我们将一个变量传递给方法时,实际上是在栈内存中创建了一个...
### 毕设常见问题——引用参考文献 #### 引言 在撰写毕业设计报告或学术论文时,正确地引用参考文献是一项基本且重要的技能。它不仅能够避免抄袭的风险,还能提升文章的可信度和学术价值。然而,在实际操作过程中...
在C++中实现引用计数,通常需要自定义一个类,例如上述代码中的`CRefCount`,它包含一个指向实际数据的指针和一个引用计数器。`CRefCount`类的构造函数初始化指针和计数器,拷贝构造函数确保新对象共享原始对象的...
在这种情况下,需要更复杂的垃圾回收机制,例如C++11引入的`std::weak_ptr`,它可以作为一个观察者,不增加对象的引用计数,从而解决循环引用问题。 总结来说,这个项目提供了一种使用C++模板实现的引用计数机制,...
在C++编程语言中,引用(Reference)是一个非常关键的概念,它提供了一种安全、高效的方式来间接访问和操作其他变量。引用不同于指针,它更像是一个变量的别名,一旦引用被初始化为某个变量,就不能再改变引用的目标...
- **go.mod文件**:每个模块的根目录下都有一个`go.mod`文件,它记录了模块的基本信息和其依赖的其他模块及其版本。 - **版本控制**:Go Modules支持精确到特定的Git标签、分支或提交哈希的版本引用,确保了代码的...
引用计数的基本原理是,每当一个客户端(如另一个对象或程序)获得对COM对象的引用时,该对象的引用计数就会增加1;当客户端不再需要该对象并释放引用时,引用计数减少1。当引用计数降为0时,表示没有客户端在使用该...
本实验报告集中于一个特定的主题——引用数的使用,结合空间表法和广义表的存储结构,这些都是在高级编程和系统设计中至关重要的概念。 首先,让我们详细探讨“引用数”。在计算机科学中,引用数(或称为计数器)...
论文的基本结构和引用文献格式MLA.doc 论文的基本结构是指学术论文的组织形式和结构,它通常包括标题、摘要、引言、文献综述、研究方法、结果、讨论和结论等部分。MLA格式是美国现代语言协会(Modern Language ...
这意味着,如果将一个引用赋值给另一个引用,它们将指向同一个对象,而不是创建对象的副本。如果一个对象没有任何引用指向它(所有引用都改变指向其他对象),那么这个对象就会变成垃圾,Java的垃圾回收机制会在适当...
在这个例子中,`ref`是一个对`x`的引用,它总是指向`x`,不能改变为引用其他变量。`ref`与`x`的关系就像别名,对`ref`的操作等同于对`x`的操作。 引用的主要优点包括: 1. 不需要`NULL`或`nullptr`:引用必须在声明...
例如,我们可以定义一个名为 Someone 的类,代表一些人(通过指定年龄、性别、性格等基本信息)。 ```java class Someone { public int age; public String sex; public String name; //other... } ``` 当我们...
Release则减少引用计数,表示有一个引用不再使用。 动态绑定和引用计数的结合使用,使得COM对象可以在不预先知道具体实现的情况下被创建和使用。例如,在C++程序中,你可以通过CoCreateInstance函数创建一个COM对象...
树形结构是一种非线性的数据结构,它由节点(每个节点包含数据和指向其他节点的引用)组成,形成一个层级关系。在Web开发中,这些节点通常通过HTML元素表示,而JavaScript则负责处理节点间的交互和动态更新。 在...
内存泄漏是程序运行过程中的一个严重问题,它发生在程序不再需要某些内存,但由于存在引用关系,导致系统无法释放这些资源。引用关系图是理解和解决内存泄漏的关键工具,它可以帮助我们直观地看到对象间的引用链路,...