java不同类型之间的equal比较_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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值