惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
J
Java Code Geeks
D
DataBreaches.Net
B
Blog RSS Feed
D
Docker
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
F
Fortinet All Blogs
Y
Y Combinator Blog
A
About on SuperTechFans
V
V2EX
罗磊的独立博客
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
Last Week in AI
Last Week in AI
S
SegmentFault 最新的问题
月光博客
月光博客
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
阮一峰的网络日志
阮一峰的网络日志

博客园 - Bryan Wong

Pushlets的初始化陷阱 在Tomcat部署Solr 4.3 Spring Security如何防止会话固定攻击(session fixation attack) Jdk自带的定时任务TimerTask和ScheduledExecutorService及其在Spring中的集成 Lucene索引,查询及高亮显示 记录几个Json的lib 蛋疼的腾讯微博数据类型和API文档 语言检测工具language-detection 你所不知道的Quartz特性 Spring Data集成MongoDB访问 Jetty的jar包依赖关系图 CAPS & BHCA Java中的集合类图 下载SUSE Linux 10 sp1的经历好曲折 C#代码检查工具:stylecop 圈复杂度基础 Scrum——“鸡”和“猪”的寓言 使用java断言调测程序 无所不能的final关键字
不同于C#的Java值类型和String类型
Bryan Wong · 2010-02-18 · via 博客园 - Bryan Wong

与C#一样,java也对基本类型进行了封装,int封装出Integer类,boolean封装出Boolean类。这样一来,基本类型就突破了值类型的限制,获得了面向对象的好处。然而,与.NET不同,java中的封装类是真正的引用类型,比如在java中用“==”比较两个封装类对象,尽管值相等,得到的结果也很可能是false,而不是像.NET一样,将基本类型的一些操作符作了重载,使得“==”符号的行为看起来与基本类型完全一致。

在java中,“Integer i=10,j=10;”使得i==j为true,但如果i或者j任何一个使用“new Integer(10)”,那么i==j的值将是false,因为java遇到new关键字就会开辟新的堆空间,这样就导致两个封装类对象的引用地址不同。同样的差异还出现在String类型。对此在java中强烈推荐使用equals方法而不是“==”来比较封装类对象的值。

测试代码如下:

code

public class ValueType
{
    
public static void main(String[] args)
    {
        
int ii = 10, jj = 10;
        System.out.println(
"ii==jj:" + (ii == jj)); // true

        Integer i 
= new Integer(10), j = new Integer(10);
        System.out.println(
"i==j:" + (i == j)); // false
        System.out.println("i.equals(j):" + i.equals(j)); // true

        System.out.println(
"ii==j:" + (ii == j)); // true
        System.out.println("i.equals(jj):" + i.equals(jj)); //true

        String x 
= "xxx";
        String y 
= "xxx";
        String z 
= new String("xxx");

        System.out.println(

"x==y:" + (x == y)); //true
        System.out.println("x.equals(y):" + (x.equals(y))); // true
        System.out.println("x==z:" + (x == z)); // false
        System.out.println("x.equals(z):" + (x.equals(z))); // true

        System.out.println(
"x.subString(1,2):" + x.substring(1,2)); // x
    }
}