Java中基本类型、对象类型及数据间的比较(equals()和==)

Java的数据类型分两种:

1. 8个基本类型(原始类型):
四个整数型
(1)byte:byte数据类型是8位;
(2)short:short数据类型是16位;
(3)int:   int数据类型是32位;
(4)long:long数据类型是64位;
两个浮点型
(5)float:float数据类型是32位(单精度浮点数);
(6)double:double数据类型是64位(双精度浮点数);
一种布尔型
(7)boolean:boolean数据类型是表示一位的信息,大小没有明确指定,只有true或false;
一种字符类型
(8)char:char数据类型是16位(Unicode字符);


2. 对象类型(封装类):
    Byte,Short, Integer,Long; 
    Float,Double,
    Boolean,
    Character,   
    String,
    以及其它一切java提供的,或者你自己创建的类。

比如 :Long是Java为long提供的封装类,一般封装类的名字首写是数值名的大写开头。

什么叫封装类? 在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算。所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以和另一个对象进行运算了。

比如我们也可以定义一个类:
class Long 
{
    int i=0;
    public Long (int i)
    {
        this.i=i;
    }
}
这样这个Integer就是一个包装类,他包装了一个整数值,然后可以在里面写一些运算符重载的方法使它支持某些运算。这个时候可以赋值: 
Long it = new Long(10);
现在变量it就是一个对象,不是一个数字。

long 是长整型,再怎么长本身也是整型,12.10的整形部分是12,当然结果是12。

byte: 八位整数 -128——127,可用来节省内存的使用。
short: 16位整数 -32768——32,767,也比较省内存。
int: 32位整数 -2,147,483,648——2,147,483,647,一般来说整数都够用了
long: 64位整数 -9,223,372,036,854,775,808—— 9,223,372,036,854,775,807,一般不需要用
float: 32位浮点,如果浮点需要节省内存用这个。
Double: 64位浮点,一般非整数浮点可用这个。
注意:float和double都不是精确的,如果要储存钱一类的必须精确的,用java.math.BigDecimal。

数据间的比较(equal()与==间的区别)

封装类和原始类型的行为完全不同,并且它们具有不同的语义,具有不同的特征和用法,它们包括:大小和速度问题,存储的数据结构类型,用作某个类的实例数据时所指定的缺省值。
对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
如:int 一般做为数值参数就够了,Integer 一般做类型转换的时候用的较多。
基本类型比较:   if (a==b) 模式
对象类型比较:  对象.equals(对象)模式, 比较的是地址,不是比较内容。
注意:equals不适合比较基本类型。

变量的值只能通过赋值表达式来改变;对象的内容只能通过自身的方法或属性来改变。 注意基本数据类型不包括:String String str = null; //将空内存地址(null)赋值给String类型的变量,变量名为str。朴素的说法是变量str的值为null。对于引用类型的变量而言,赋值操作只是将对象的内存地址保存到变量中。也就是说引用类型的变量值是对象的内存地址而不是对象的内容 String str1 = "abc"; String str2 = new String("abc");
上述两种赋值操作本质上没有任何区别,最大的区别是生成对象的方法不同(这一点与赋值操作无关)。对于变量而言,其值仍然是所指对象的内存地址。

		String p1 = "lyy";
		String p2 = "lyy";
		String p3 = p1;
		System.out.println((p1==p2) + "****" + (p1.equals(p2)));//true****true
		System.out.println((p1==p3) + "####" + (p1.equals(p3)));//true****true		
		String s1 = new String("lyy");
		String s2 = new String("lyy");
		String s3 = s1;
		System.out.println((s1==s2) + "****" + (s1.equals(s2)));//false****true
		System.out.println((s1==s3) + "####" + (s1.equals(s3)));//true####true
String通过常量方式来赋值时,地址和内容相同,通过==和equal比较结果相同;
通过对象方式赋值时,内容相同但地址不同,所以用==比较的结果是false,通过equal比较结果是true。


		int i1 = 127;
		int i2 = 127;
		int i3 = 128;
		int i4 = 128;
		System.out.println(i1==i2);//true,无equal语法
		System.out.println(i3==i4);//true,无equal语法
		Integer k1=127;
		Integer k2=127;
		Integer k3=128;
		Integer k4=128;
		System.out.println((k1==k2) + "####" + (k1.equals(k2)));//true####true
		System.out.println((k3==k4) + "****" + (k3.equals(k4)));//false****true
int是基本类型可使用==来比较,无法使用equal来比较;
Integer是对象类型,当取值在-128到127之间时,这些值都存储在常量池中,地址和内容相同,可以通过==和equal来比较,超出的部分则是通过对象的方式存储,地址不同但内容相同,所以equals比较结果是true。

转载于:https://my.oschina.net/liuyuanyuangogo/blog/849532

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值