Java数据类型

一、数据基础类型

在这里插入图片描述
这里一定要弄清楚“数据类型”与“基本数据类型”的区别;比如牛客刷题“数据类型有数值型、字符型、布尔型” 这说法是错的。
简单来说,基本数据类型为四类八种,如下:
第一类:整数类型 byte short int long
第二类:浮点型 float double 一般小数默认就是double,占8字节,float占4字节,要加f/F
第三类:逻辑型 boolean(它只有两个值可取true false;因此true false这两个是数值,而不是java关键字)
第四类:字符型 char

注意的有:
注意:
①byte为127时,+1后为-128;Byte为byte的包装类型,初始化为nullbyte初始化为0;byte类型的变量在做运算时会被转换为int类型的值,
②java采用unicode编码;其中int占4字节,char占2字节;
③字符串不是基本数据类型;即String类型的变量是引用数据类型的类类型
④在为Integer赋值的时候,java编译器会将其翻译成调用valueOf()方法。比如Integer i=127翻译为Integer i=Integer.valueOf(127);对于-128到127之间的数,Java会对其进行缓存。而超出这个范围则新建一个对象
⑤ String是不可修改的,且java运行环境中对String对象有一个对象池保存;
Jvm确实对型如String str1=”java”;的String对象放在常量池里,但是它是在编译时那么做的,而String s=str1+str2;是在运行时刻才能知道,也就是说str1+str2是在堆里创建的
⑥Java中**静态变量(static修饰)**只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。
⑦对于static修饰的变量,在方法调用时,可以不用初始化赋值(会有默认值),对于方法中的普通变量,调用前则需要赋值,不然报错

二、数据的操作

2.1最常用的等号比较

==与equals的区别,==比较的是两个变量的地址,euqals比较的话 先比较地址,如果相等,直接返回true,然后看比较的对象是不是String类型,如果不是直接返回false,如果是的话,则依次比较每个字符,如果全部相等,则返回true

hashCode()方法和equals()方法的区别:作用其实是一样的,在Java里都是用来对比两个对象是否相等一致。
重写的equals()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高。
1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。
2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

2.2带有基本型与封装型的比较

1、基本型和基本型封装型进行“= =”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
int a = 220;
Integer b = 220;
System.out.println(a= =b);//true
2、两个Integer类型进行“= =”比较, 如果其值在-128至127 ,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
Integer c=3;
Integer h=3;
Integer e=321;
Integer f=321;
System.out.println(c= =h);//true
System.out.println(e= =f);//false
3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。
Integer a=1;
Integer b=2;
Integer c=3;
System.out.println(c.equals(a+b));//true
4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。
int i=1;
int j = 2;
Integer c=3;
System.out.println(c.equals(i+j));//true

2.3赋值运算符

2.4其他数据零碎知识

在这里插入图片描述在这里插入图片描述
1、所有的byte,short,char型的值将被提升为int型;
2、如果有一个操作数是long型,计算结果是long型;
3、如果有一个操作数是float型,计算结果是float型;
4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
--------------解析--------------
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。

String类中的 replaceAll方法的第一个参数是一个正则表达式,而".“在正则表达式中表示任何字符,所以会把前面字符串的所有字符都替换成”/"。如果想替换的只是".",那么久要写成"\."

1.默认值 取值范围 示例
字节型 : 0 -27—-27-1 byte b=10;
字符型 : ‘ \u0000′ 0—-2^16-1 char c=’c’ ;
short : 0 -215—-215-1 short s=10;
int : 0 -231—-231-1 int i=10;
long : 0 -263—-263-1 long o=10L;
float : 0.0f -231—-231-1 float f=10.0F
double : 0.0d -263—-263-1 double d=10.0;
boolean: false true\false boolean flag=true;

Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。
不同的编码之间是可以转换的,通常流程如下:
将字符串S以其自身编码方式分解为字节数组,再将字节数组以你想要输出的编码方式重新编码为字符串。
例:String newUTF8Str = new String(oldGBKStr.getBytes(“GBK”), “UTF8”);

常见的ASCII码,A=65,a=97;0=48(以此类推)
1.正数的原码、反码、补码都相同;
2.负数的原码:最高位为1,其余位为真值的绝对值;
3.负数的反码:在原码的基础上,符号位不变,其余位按位取反;
4.负数的补码:在原码的基础上,符号位不变,其余位取反,最后加1;也就是在反码的基础
上加1


```java
for (int i = 0; i < 32; i++)
        {
            // 0x80000000 是一个首位为1,其余位数为0的整数
            int t = (a & 0x80000000 >>> i) >>> (31 - i);
            System.out.print(t);
        }          //获取负数a的补码   

==的优先级高于三元操作符,三选运算符从右往左执行。
三元操作符类型的转换规则:
1.若两个操作数不可转换,则不做转换,返回值为Object类型
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
4.若两个操作数都是直接量数字,则返回值类型为范围较大者

pow方法,pow(a,b)求a的b次方,返回值为double类型,要导入 static java.util.Math.pow 包;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值