(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 变量 数据类型 运算符 知识小结 <------------------ ... 
随机推荐
- UITextField属性
			0. enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. 1.borderStyl ... 
- Oracle 12C -- 使用seed PDB创建新的pdb
			$ sqlplus '/as sysdba' SQL*Plus: Release Production on Tue Jun :: Copyright (c) , , Oracle. All righ ... 
- 《30天自制操作系统》11_day_学习笔记
			harib08a: 鼠标的显示问题:我们可以看到,鼠标移到窗口最右侧之后就不能再移动了,而WIN中,鼠标是可以移动到最右边隐藏起来的.怎么办?把鼠标指针显示的范围扩宽就行!我们来修改一下HariMai ... 
- 压缩 & 解压缩 命令汇总:tar、zip & unzip、
			1. tar命令详解 格式:tar [-cxtzjvfpPN] 文件与目录 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五 ... 
- linux第12天   线程
			今天主要学习了共享内存,信号量的封装,还有线程. POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的 要使用这些函数库,要通过引入头文<p ... 
- ajax测试异步提交
			今天测试了$.ajax()方法: $("a").click(function(){ $.ajax({ url:"MyJsp.jsp&qu ... 
- JSP-03-实现数据传递
			会话跟踪:隐藏表单域.URL重写和Cookie 3.1 传参方法 get /post 区别 3.2 request 获取参数 数据类型 变量名 = (数据类型)request.getPar ... 
- yii2开启session
			1.在写入session的页面. use yii\web\Session;$session = new Session;$session->open(); 2.在获取session的页面 use ... 
- $.trim()函数
			$.trim(str) 返回:string: 参数str :String类型,需要去除两端空白字符的字符串.如果参数str不是字符串类型,该函数将自动将其转为字符串(一般调用其toString()方法 ... 
- (function($){...})(jQuery) 函数详解
			function(arg){...} 这是一个匿名函数,参数是arg. 而调用匿名函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: function(arg){.. ... 
