(java)==和equals()的使用小结
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()的使用小结的更多相关文章
- Java实战equals()与hashCode()
一.equals()方法详解 equals()方法在object类中定义如下: 代码 public boolean equals(Object obj) { return (this == obj); ...
- Java的equals方法的使用技巧
Java的equals方法的使用技巧 1.业务场景: 在某个社交软件中,要求每个用户的用户名(name)必须独一无二,那么在每次增加新用户的时候,都要对该用户的注册名进行判断,如果当前用户名已经被占用 ...
- 【Java】equals()与hashCode()方法详解 (转)
java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...
- java keytool证书工具使用小结
java keytool证书工具使用小结 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, .crt PEM-encod ...
- Java中equals与==和comparaTo的区别
一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
- Java关键字transient和volatile小结(转)
Java关键字transient和volatile小结(转) transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. tran ...
- JAVA 变量 数据类型 运算符 知识小结
---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...
随机推荐
- javascript设计模式学习之十——组合模式
一.组合模式定义及使用场景 组合模式将对象组合成树形结构,用以表示“部分—整体”的层次结构,除了用来表示树形结构之外,组合模式还可以利用对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性. ...
- News: Visual Studio Code support debugging Linux Apps
http://arstechnica.com/information-technology/2015/11/visual-studio-now-supports-debugging-linux-app ...
- MySQL的半同步复制监控
(1)master端 >show variables like 'rpl_semi_sync%'; +------------------------------------+-------+ ...
- ios提示框,自动消失
-(void)click { NSString *showMsg = @"点击我,开始提示"; int width = showMsg.length * 20; UIWindow ...
- MVC 学习系列-Controller
MVC最核心的也就是Controller了,控制器(controller)在功能中起到了核心功能. 1,)在MVC类库中,根据URL,通过MVCHandler进入MVC处理系统中, 2,)解析初始化对 ...
- 前端构建工具gulpjs
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...
- 实验十三_编写、应用中断例程_2 & 总结
编写并安装int 7ch中断例程,功能为完成loop指令的功能 参数:(cx)= 循环次数,(bx)= 位移 以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int.iret指令执行前后 ...
- pg_rewind 介绍
pg_rewind—使一个PostgreSQL数据目录与另一个数据目录(该目录从第一个PostgreSQL数据目录创建而来)一致. 描述 pg_rewind是一个在集群的时间线参数偏离之后,用于使一个 ...
- csuoj 1329: 一行盒子
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1329 1329: 一行盒子 Time Limit: 1 Sec Memory Limit: 12 ...
- WebView自适应屏幕大小
webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); ...