(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 变量 数据类型 运算符 知识小结 <------------------ ...
随机推荐
- PHP Tab的Demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring AOP 问与答
AOP的实现有哪些 AOP常见的实现有: Spring AOP Aspectj Guice AOP Jboss AOP 等 AOP Alliance 是什么, 为什么Spring AOP, G UIC ...
- Android 开发环境搭建以及编译
两种搭建编译环境的方式,一种方法是用户安装虚拟机,然后安装基础的Ubuntu12.04.2 系统,利用提供的工具和详细的使用步骤,搭建编译环境:另外一种方法是用户安装虚拟机,然后直接加载 “搭建好的U ...
- nginx:403 forbidden 二种原因
出现403 forbidden的两种原因:1.是缺少索引文件(index.html/inde.php):2.是权限问题 一.缺少索引文件index.html/inde.php 比如下面的配置: ser ...
- Highcharts选项配置详细说明文档(zz)
http://www.helloweba.com/view-blog-156.html Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明 ...
- PostgreSQL数据库系统的进程结构
PostgreSQL数据库系统的主要功能都集中于Postgres程序,其入口是Main模块中的main函数,在初始化数据集簇,启动数据库服务器是,都将从这里开始执行.Main模块主要的工作时确定当前的 ...
- Leetcode: Random Pick Index
Given an array of integers with possible duplicates, randomly output the index of a given target num ...
- 20145207 《Java程序设计》第5周学习总结
前言:先聊两句,上午电路实习,刚开始没多久就让电烙铁烫了,倒霉催的~晚上来这里接着弄代码,透心凉心飞扬~ 教材学习内容总结 一.异常处理 1.语法与继承结构 使用try.catch: Java中所有错 ...
- Tomcat8.5
说明:Tomcat服务器上一个符合J2EE标准的Web服务器,在tomcat中无法运行EJB程序,如果要运行可以选择能够运行EJB程序的容器WebLogic,WebSphere,Jboss等Tomca ...
- visio的简单用法
visio图边缘会自动扩展 将常用工具放到收藏夹中,拖进去就可以用. 基本形状基本能够满足一般的需求. 支持自己定义形状,将定义好的形状右击组合之后,收藏到收藏夹或导出模版. 多用组合,收藏夹,调整图 ...