Java数据类型

Java数据类型

  • 基本类型
    • 数值类型
      • 整数类型
        • byte 1字节 -128-127
        • short 2字节 -32768-32767
        • int 4字节
        • long 8字节
      • 浮点数类型
        • float 4字节 精度7位
        • double 8字节
      • 字符类型
        • char 2个字节
      • boolean类型
        表示对错只占1位 1/8字节
public  class Demo02{
    public  static  void  main (String[] args){
        //八大基本数据类型
        
        //整数
        int num1 = 10;
        byte num2 = 20;
        short num3 = 30;
        long num4 = 30L;//long类型要在数字后加L
        //小数
        float num5 = 50.1f;//float类型要在数字后加f
        double num6 = 3.14159265358;
        //字符
        char name = "于";//char只有一个字
        //字符串String不是关键字而是一个类
        
        //布尔值
        boolean flag = true;
        boolean flag1 = false;
    }
}
  • 引用类型
    • 接口
    • 数组

基本数据类型与引用数据类型的区别

基本数据类型与引用数据类型的存储方式不同
基本数据类型存储的是具体的数值
引用类型存储的是对象的地址

class Demo01{
    public static void main(String[] args) {
        int i;// 默认值: 0 
        char c;// 默认值:0
        String str;// 默认值:null
        String stra = "A";
        String strb="A";
        System.out.println(stra==strb);
    }
    
}

字符串常量池以及字符串为什么不能用 == 比较

  • 字符串常量池
    为字符串开辟一个字符串常量池,在创建字符串常量时,首先检查字符串
    常量池中是否存在该字符串,如果存在该字符串,则直接返回引用的对象,不存
    在则创建该字符串并放入字符串常量池中。
class Demo{
    String str = new String("a");
}

在执行上述语句时,首先会检查常量池中是否有对象"a",如果有的话则返回对应
的实力,如果没有的话需要创建一个新的实例对象。因此如果常量池中没有"a"需
要创建两个对象,否则创建一个。

  • 不能用 == 比较字符串
    Java中String表示的所存储数据的地址,如果使用 == 判断的并不是字符串
    是否相同,而是判断两个字符串是否存放在相同的位置。

转型

  • 基本数据类型的转型:
    byte>>short>>int>>long
    未声明数据类型的整形,默认为int
    float>>double
    未声明数据类型的浮点型,默认为double
    boolean类型与其他基本类型之间不能进行类型转换
  • 自动转型:将数据范围小的数据类型自动转换为数据范围大的类型
class  Demo{
    public static void main(String[] args) {
        long a = 10000000000000;//没有加L会默认为int型,但已经超过范围会报错
        long b = 10000000000000L;
        int c = 1000;
        long d = c;
        float e = 1.5F;
        double f = e;
    }
}
  • 强制转型:将数值范围大的数据类型赋值给数值范围小的数据类型,可能会造成精度的丢失
class  Demo{
    public static void main(String[] args) {
        byte p = 3;
        int a = 3;
        byte b = a;//编译时会出错
        byte c = (byte)  a;
        float d = (float) 4.0;
    }
}
  • 引用数据类型转型:
    自动转型:子类对象名向上转型为父类类型 属于父类引用子类
    A a = new B();// 成立的前提:A 是 B的父类
    强制转型: 被自动转型过的父类类型变量名可以强制向下转型回子类类型
    属于父类转换为子类
    B b1 = (B)a;
//声明父类
public class A{
    
}
//声明两个子类
class B extends A{
    public void testB(){
    }
}
class C extends A{
    
}
public class  Demo{
    public static void main(String[] args) {
        B b = new B();
        A a1 = b;// 子类转换为父类自动转型
        C c = new C();
        A a2 = c;//子类转换为父类自动转型
        B b1 = (B) a1;//强制转型
        b1.testB();
    }
}

重写equals 比较对象时需要注意方面

  • Java中的String类
    在Java中字符串属于对象,String类用来创建和操作字符串
    • 创建字符串最简单的方式
      String str = “ylj”;
    • 也可以采用关键字和构造方法创建String对象
      String str2 = new String(“ylj”);
    • 由String直接创建的字符串会存储在字符串常量池之中,而由new所创建的
      字符串对象则存储在堆上
  • " == "和"equals()"两种方法比较字符串
    • " == "方式所比较的是两个变量本身的值,如果用于String声明的字符串比较
      比较的是两个对象在内存中的地址是否相同
    • “equals()” 方法比较的是字符串之中所包含的内容是否是相同的

由上述两个基本知识可以知道

package y20220225;
public class Demo {
    public static void main(String[] args) {
        String s1 = "ylj";
        String s2 = "ylj";
        String s3 = new String("ylj");
        String s4 = new String("ylj");
        System.out.println("s1 == s2:" + (s1 == s2));//s1 == s2:true 两个都是字符串常量池里的地址是同一地址
        System.out.println("s3 == s4:" + (s3 == s4));//s3 == s4:false 新建对象在堆中,新建对象的地址位于栈中,地址不同
        System.out.println("s.3equals(s4):" + s3.equals(s4));//s.3equals(s4):true 内容相同
    }
}
  • 重写equals方法时需要注意
    首先判断地址是否相同,如果地址相同则必定是同一个变量,无需再进行别的判断
    再判断变量类型是否有继承
    存在继承的关系,再判断每一个属性的数值是否相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值