关于java中==号的一点了解
2015-11-28 16:51
323 查看
今天碰到了一个类重写了equal与hashcode的类。
不解,百度,发现了一个知识漏洞
1.
Java中判断两个变量是否相等有两种方式:一种是利用==运算符,另一种是利用equals方法。如果变量是基本类型,那么使用==和使用equals会得到相同的结果,都是判断变量的值是否相对。如果变量是引用类型,==运算符判断变量是否指向同一引用对象,equals判断变量”值”是否相等。Java值类型对应的包装类(Boolean、Byte、Short、Integer、Long、Float、Double、Charcater)可以利用==运算符进行值判断。
以上一段来自博客:
/article/8688168.html
2.
于是继续探究基本类型都有什么
数据类型 大小 范围 默认值
byte(字节) 8 -128 - 127 0
shot(短整型) 16 -32768 - 32768 0
int(整型) 32 -2147483648-2147483648 0
long(长整型) 64 -9233372036854477808-9233372036854477808 0
float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
boolean(布尔型) 1 true/false false
3
那么为什么基本类型可以直接=,但是非基本类型就要new呢?
举一个简单的例子:String str1 = “x” ; String str2 = “x” ; String str3 = new String(“x”) ;
String本身就是一个对象而不是基本数据类型,String的变量名是对String类的引用。其它那些Stirng Literals Pool就不讲了,我只是简单地讲下上面的过程,希望对大家用少用
在声名str1的时候,由于还有没等于”x”的对象,所以就创建了一个新的对象;在声名str2的时候,由于有了等于”x”的对象,所以系统就将其值取出直接返回给str2,所以str1和str2变量名都是作为”x”对象的引用。当然new String()就实列一个新的对象了。到了这里大家还会认为”String型”吗?==============================================再讲一下“==”和“equals”的用法!(会更理解上面所说的)== 对象的比较好像也就是地址的比较equals对象值的比较所以str1 == str2 返回True,str1 == str3 返回False, str1.equals(str3)返回True。==============================================
4
还是有些不解,为什么string就不是基本类型呢?
基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构
基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为
java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。
以上来自知道:
http://zhidao.baidu.com/link?url=mqwygDMdvwXJqvG4BJgqhor20goPngF6T5DXopvuibZPrVBqcHJvGm7ipSxfSJL9TEMm0GkAD6HginHWTwp1qq
http://zhidao.baidu.com/question/1894110519118182100.html
http://zhidao.baidu.com/question/982742464454051939.html
不解,百度,发现了一个知识漏洞
1.
Java中判断两个变量是否相等有两种方式:一种是利用==运算符,另一种是利用equals方法。如果变量是基本类型,那么使用==和使用equals会得到相同的结果,都是判断变量的值是否相对。如果变量是引用类型,==运算符判断变量是否指向同一引用对象,equals判断变量”值”是否相等。Java值类型对应的包装类(Boolean、Byte、Short、Integer、Long、Float、Double、Charcater)可以利用==运算符进行值判断。
int inta = 65; float floata = 65.0f; Integer intb = 65; Float floatb = 65.0f; //inta == floata根据值判断,结果是true System.out.println("inta == floata:" + (inta == floata)); //inta == intb根据值判断,结果是true System.out.println("inta == intb:" + (inta == intb)); //inta == floatb根据值判断,结果是true System.out.println("inta == floatb:" + (inta == floatb)); String stra = "测试"; String strb = new String("测试"); String strc = new String("测试"); String strd = "测试"; //stra和strb指向不同的对象,结果是false System.out.println("stra == strb:" + (stra == strb)); //stra和strd指向同一个对象,结果是true System.out.println("stra == strd:" + (stra == strd)); //strb和strc指向不同的对象,结果是false System.out.println("strb == strc:" + (strb == strc)); //strb和strc的值一样,结果是true System.out.println("strb equals strc:" + (strb.equals(strc))); //stra和strb的值一样,结果是true System.out.println("stra equals strb:" + (stra.equals(strb)));
以上一段来自博客:
/article/8688168.html
2.
于是继续探究基本类型都有什么
数据类型 大小 范围 默认值
byte(字节) 8 -128 - 127 0
shot(短整型) 16 -32768 - 32768 0
int(整型) 32 -2147483648-2147483648 0
long(长整型) 64 -9233372036854477808-9233372036854477808 0
float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
boolean(布尔型) 1 true/false false
3
那么为什么基本类型可以直接=,但是非基本类型就要new呢?
举一个简单的例子:String str1 = “x” ; String str2 = “x” ; String str3 = new String(“x”) ;
String本身就是一个对象而不是基本数据类型,String的变量名是对String类的引用。其它那些Stirng Literals Pool就不讲了,我只是简单地讲下上面的过程,希望对大家用少用
在声名str1的时候,由于还有没等于”x”的对象,所以就创建了一个新的对象;在声名str2的时候,由于有了等于”x”的对象,所以系统就将其值取出直接返回给str2,所以str1和str2变量名都是作为”x”对象的引用。当然new String()就实列一个新的对象了。到了这里大家还会认为”String型”吗?==============================================再讲一下“==”和“equals”的用法!(会更理解上面所说的)== 对象的比较好像也就是地址的比较equals对象值的比较所以str1 == str2 返回True,str1 == str3 返回False, str1.equals(str3)返回True。==============================================
4
还是有些不解,为什么string就不是基本类型呢?
基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构
基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为
java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。
以上来自知道:
http://zhidao.baidu.com/link?url=mqwygDMdvwXJqvG4BJgqhor20goPngF6T5DXopvuibZPrVBqcHJvGm7ipSxfSJL9TEMm0GkAD6HginHWTwp1qq
http://zhidao.baidu.com/question/1894110519118182100.html
http://zhidao.baidu.com/question/982742464454051939.html
相关文章推荐
- java基础阶段总结
- 我的第六个java程序 spring-bean
- Java虚拟机运行时数据区
- 《疯狂Java讲义》第2章——理解面向对象
- LRU缓存介绍与实现 (Java)
- Spring 中的 classpath*: 与 classpath: 通配符
- SpringMVC注解@RequestParam
- Spring 框架的设计理念与设计模式分析
- java保存图片内容到数据库
- java -> sql 数据类型
- 设计模式(六)原型模式
- eclipse中通过properties->android->add关联项目出错
- Java类加载器总结整理
- Java语法基础
- Eclipse(adb)连不上Android手机 解决方法
- Struts2模型驱动的一个问题
- Java heap space
- java 中常见异常
- java加载文件路径问题
- Spring声明式事务管理(基于注解的方式)