1.如果两个变量说基本数据类型,且都是数值类型,eg.65f,65(不一定要求数据类型严格相同),只要两个变量的值相等,就将返回true

int it=65;
float fl=65.0f;
char ch='A';
System.out.println(it==fl);   //true;
System.out.println(it==ch);  //true;


 


   2.对于两个引用类型变量,只有它们指向同一个对象时,==判断才会返回true,==不可用于比较类型上没有父子关系的两个对象

    引用类型变量:Integer  (基本数据类型 自动装箱/拆箱)

Integer ina=2;
Integer inb=2;
System.out.println(ina==inb);//true;
//两个2自动装箱了
Integer biga=128;
Integer bigb=128;
System.out.println(biga=bigb);//false;
/* java.lang.Integer类的源代码
* static final Integer[] cache=new Integer[-(-128)+127+1];
* static {
* //执行初始化,创建-128到127的Integer实例,并放到cache数组中
* for(int i=0;i<cache.length;i++)
* cache[i]=new Integer(i-128);
* }

* */
/*所以,-128-127之间的同一个整数自动装箱成Integer实例时,永远都是引用cache数组的同一个数组元素,所以它们全部相等
* 但每次把一个不在-128-127范围内的整数自动装箱成Integer实例时,系统总是重新创建一个Integer实例,所以运行结果是false
*/

------------------------------------------------------------------------------------------------------------------------------------------------------------

  //valueOf()
  //如果采用new构造器来创建Integer对象,则每次返回全新的Integer对象
  //如果采用valueOf()方法来创建Integer对象,则会缓存该方法创建的对象

//生成新的Integer对象
Integer in1=new Integer(6);
//生成新的Integer对象,并缓存该对象
Integer in2=Integer.valueOf(6);
//直接从缓存中取出Integer对象
Integer in3=Integer.valueOf(6);
System.out.println(in1==in2);//false
System.out.println(in2==in3);//false
//由于Integer只缓存-128-127之间的值
//因此200对应的Integer对象没有被缓存
Integer in4=Integer.valueOf(200);
Integer in5=Integer.valueOf(200);
System.out.println(in4==in5);//false

-----------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------

    引用类型变量:String

String str1=new String ("hello");
String str2=new String ("hello");
System.out.println(str1==str2);//false;
System.out.println(str1.equals(str2));//ture;
//str1和str2是引用型变量,通过new 关键字创造的String对象,故不想等
/*("hello"和new String("hello")的区别:
* 当java程序直接使用形如“hello”的字符串直接量(包括在编译时就直接计算出来的字符串值)时,
* JVM将会使用常量池来管理这些字符串
* 当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器
* 来创造一个新的String对象,新创造的String 对象被保存在堆内存中。
* 也就是:new String("hello")一共产生了两个字符串对象)
*/

---------------------------------------------------------------------------------------------------------------------------------------------------

String s1="xuexijava";
String s2="xuexi";
String s3="java";
//s4后面的字符串值可以在编译时就确定下来,s4直接引用常量池的"xuexi java"
String s4="xuexi"+"java";
//s5和s4一样的
String s5="xue"+"xi"+"java";
//s6后面的字符串值不能在编译时就确定下来,所以不能引用常量池镇南关的字符串
String s6=s2+s3;
//s7在堆内容中,不在常量池中
String s7=new String("xuexijava");
System.out.println(s1==s4);//true;
System.out.println(s1==s5);//true;
System.out.println(s1==s6);//false;
System.out.println(s1==s7);//false;

  //JVM常量池保证相同的字符串直接值只有一个,不会产生多个副本
  //String已经重写了Object的equals()方法,String的equals()方法判断相等的标准:
  //只要两个字符串所包含的字符序列相等,通过equals()比较将返回true



//题目
String s="hello";
String t="hello";
char c[]={'h','e','l','l','o'};
s.equals(t); //true;
t.equals(c); //false;
s==t; //true;
t.equals(new String("hello"));//true;
//t.equals(c)这个语句在instanceof String 这一步就不会通过,也就是char[]压根不能和String比较,类型不同

----------------------------------------------------------------------------------

public class Test{
public static void main(String[] args){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operator(a,b);
System.out.println(a+","+b);
}
public static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}

输出结果:AB,B

(java)==和equals()的使用小结的更多相关文章

  1. Java实战equals()与hashCode()

    一.equals()方法详解 equals()方法在object类中定义如下: 代码 public boolean equals(Object obj) { return (this == obj); ...

  2. Java的equals方法的使用技巧

    Java的equals方法的使用技巧 1.业务场景: 在某个社交软件中,要求每个用户的用户名(name)必须独一无二,那么在每次增加新用户的时候,都要对该用户的注册名进行判断,如果当前用户名已经被占用 ...

  3. 【Java】equals()与hashCode()方法详解 (转)

    java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...

  4. java keytool证书工具使用小结

    java keytool证书工具使用小结 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, .crt    PEM-encod ...

  5. Java中equals与==和comparaTo的区别

    一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...

  6. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  7. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

  8. Java关键字transient和volatile小结(转)

    Java关键字transient和volatile小结(转) transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. tran ...

  9. JAVA 变量 数据类型 运算符 知识小结

    ---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...

随机推荐

  1. status 状态栏

    http://www.pchou.info/ios/2015/08/22/oc-statusbar.html IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏.控制状态栏的文字颜色等,导 ...

  2. 基于jdk proxy的动态代理模式

    代理模式 是spring AOP机制的实现基础,有必要学习一下. 有两种,一种是目标类有接口的, 采用JDK动态代理,一种是目标类没接口的,采用CGLIB动态代理. 先看一组代码, package c ...

  3. 阶乘之和 & 程序运行时间 & 算法分析

    实例:输入n,计算S = 1! + 2! + 3! + 4! + ... + n!的末六位(不含前导0).其中 n ≤ 106. 分析:考虑到数据溢出后程序如下: #include <stdio ...

  4. PostgreSQL pg_dump pg_dumpall and restore

    pg_dump dumps a database as a text file or to other formats. Usage: pg_dump [OPTION]... [DBNAME] Gen ...

  5. poj 1475 || zoj 249 Pushing Boxes

    http://poj.org/problem?id=1475 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=249 Pushin ...

  6. acm算法模板(1)

    1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函数 10 1.6 面积 15 1.7 球面 16 1.8 三角形 17 1.9 三维几 ...

  7. 大数据Spark超经典视频链接全集

    论坛贴吧等信息发布参考模板 Scala.Spark史上最全面.最详细.最彻底的一整套视频全集(特别是机器学习.Spark Core解密.Spark性能优化.Spark面试宝典.Spark项目案例等). ...

  8. JS不兼容减号,css属性转驼峰写法

    <script> function changeFormat(str) { return str.replace(/-(\w)/g, function(k, r) { return r.t ...

  9. BI (商业智能)

    BI (商业智能) 编辑 商业智能(BI,Business Intelligence). BI(Business Intelligence)即商务智能,它是一套完整的解决方案,用来将企业中现有的数据进 ...

  10. asp上传图片提示 ADODB.Stream 错误 '800a0bbc'的解决方法

    asp上传图片提示 ADODB.Stream 错误 '800a0bbc' 有这个提示有很多问题导致.权限是常见一种.这个不多说,还有一个有点怪的就是 windows2008显示系统时间的格式竟然是:2 ...