java之数据类型+运算符

java之数据类型+运算符,第1张

java之数据类型+运算符 java之数据类型+运算符 数据类型
  • 布尔类型变量

    • boolean
    • 仅有true和false
    • 与c语言中的0为假,1为真不可等同
    • 类型大小不定,有的JVM中时一个字节,有些事1bit
  • 字符串类型变量

    • C语言中无字符串类型,java中有
    • 用“ ”括起来的一串字符为字符串字面值
    • 为引用数据类型
    • 有些字符串中的字符需用到转义字符,如打一个‘’,那可能需要:" "
    基本数据类型byte、short、int、long、float、double、char、boolean引用数据类型String、数组、接口、枚举。。。
    • 字符串拼接
public class helloworld{
    public static void main(String[] args){
        System.out.println("nihao"+10);//会拼接为nihao10,这么个字符串
        System.out.println(10+20+"nihao");//由于顺序计算,所以最终是:30nihao
        System.out.println(10+""+20+"hello");//1020hello
    }
}
  • 转义字符(常用的就这几个)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fMzNSQSq-1635823080418)(C:UsersLebronHardenAppDataRoamingTyporatypora-user-imagesimage-20211102095518215.png)]

  • 变量的作用域濾

    • 一个变量能够生效的范围,一般是变量定义所在代码块

    • 只有8种基本数据类型才有对应的包装类

    • java中的变量:(java中没有C中的全局变量

      成员变量普通成员变量、静态成员变量局部变量同C
  • 变量的命名规则

    • 硬性指标
      1. 一个变量名只能包含数字、字母、下划线(及$,但不要用)
      2. 数字不可作开头
      3. 变量名大小写铭感
    • 软性指标
      1. 变量名最好可以顾名思义
      2. 变量名最好别用拼音
      3. 变量名的词性最好是名词
      4. 小驼峰(类名用大驼峰)
  • 常量(运行中不可被修改的量,只能被初始化一次)

    • 字面值常量
    • final关键字修饰的常量(类似C中的const)

变量在程序运行时,才知道是几

常量在编译时,已经确定是几


  • 理解类型转换

    • public class helloworld{
          public static void main(String[] args){
              int a=10;
              long b=20;
              a=b;//报错
              b=a;//成功编译
          }
      }
      
      • 不同数据类型变量之间的赋值,表示范围更小的类型可隐式类型转换为范围较大的类型

        反之,则不行。

    • int和boolean之间的相互赋值

      public class helloworld{
          public static void main(String[] args){
              int a=10;
              boolean b=true;
              a=b;//报错
              b=a;//报错
          }
      }
      
      • int和boolean类型互不相干,不可相互赋值
    • int字面常量给byte赋值

      public class helloworld{
          public static void main(String[] args){
              byte a=100;//通过
              byte b=200;//不通过
          }
      }
      
      • java中使用字面常量赋值时,java会自动进行书库范围校验,判断是否合理,这里的byte可表示范围是:-128~127
    • 使用强制类型转换

      • double类型的数据,强制类型转换后,小数部分丢失
      • 强制类型转换不一定成功,互不相干的类型无法强转。

对上述的总结✈️

  1. 不同数字类型变量之间的赋值,小范围的变量可做隐式类型转换后赋给大范围变量,反之不可
  2. 要对1中的 *** 作(大范围数据赋给小范围数据)硬搞,只可做强转,但此时可能会有精度丢失
  3. 用字面常量做赋值不可超出被赋值变量的可表范围

  • 理解数值提升

    • int 和long混合运算

      public class helloworld{
          public static void main(String[] args){
              int a=10;
              long b=20;
              int c=a+b;//出错,a+b结果为long,不可赋值给int的c
              long d=a+b;//通过
          }
      }
      
    • byte和byte的运算

      public class helloworld{
          public static void main(String[] args){
              byte a=10;
              byte b=20;
              byte c=a+b;//出错,a+b的结果是int类型,不可赋值给byte类型的c
          }
      }
      

对上述的总结

  1. 小于4byte的表达式运算,即使同类型,也都会提升为4byte,在计算

  2. 大于4byte的表达式混合类型运算,小的会转成大的再运算,其结果也是大范围的类型


  • int和string之间的相互转化

    public class helloworld{
        public static void main(String[] args){
            int num=10;
            String str2=num+"";//这里是上面有讲到的字符串拼接的知识,此时的10相当于字符串了
            String str1=String.valueOf(num);//String为包装类,这个包装类中有很多的方法(函数),这里的.就是调用,调用了valueOf(int num)这个函数,含义是:把int属性的num改成String属性。形式上没啥变化,但10已经不再是int,而是String.
        }
    }
    
    public class heloworld{
        public static void main(String[] args){
            String str="123";
            int ret=Integer.valueOf(str);
            System.out.println(ret+1);//输出124,道理和前述代码一致
        }
    } 
    
    

包装类小总结

  1. 在java中每个基本数据类型都有自己对应的包装类(里面包含了丰富的函数(方法))
  2. 除了int和char两个基本数据类型的包装类的类名分别是:Integer和Character,其他基本数据类型对应的类名都是首字母大写,如long的包装类的类名就是Long

运算符
  • 算术运算符
    • +—*/%
    • 对/:
      1. 分母不能为0
      2. int/int可能会精度丢失
    • java中每个语句自带assert,也就是说语句报错后,不再往下继续执行!
    • 对%:
      1. 不同于C中只能 *** 作数为整数的限制,java中int和double都可以使用
  • 增量赋值运算符
    • 同C中的复合赋值运算符
  • 自增自减运算符(同C)
  • 关系运算符
    • > >= < <= == !==
      1. 关系运算符的表达式返回值都是boolean类型
  • 逻辑运算符
    • && || !(同C)
    • 注意逻辑运算符有短路现象!!!
    • !的 *** 作对象需为布尔表达式
  • 位运算符
    • & | ^
    • 十进制转其他进制(如8/16),先写出二进制补码,对8进制3个3个一组,16进制,4个4个一组去读那个补码的数据,就是你转换而来的东西。
  • 移位 *** 作符
    • 左移、算术右移、逻辑右移(无符号右移)
    • 左移1位相当于×2,移N位就是×2^N
    • 右移1位相当于/2,移N位就是/2^N
    • 计算机的移位效率高于计算乘除,所以当某个代码正好乘除2^N时,可用移位 *** 作符代替
    • 移动负数位和移位的数字过大度没有意义
  • 条件运算符
    • 表一?表二:表三(同C的三目运算符)
    • 表1位布尔表达式
    • java中的唯一一个三目运算符
  • 运算符的优先级
    • 用括号去控制,所以不用去刻意的记优先级

效率高于计算乘除,所以当某个代码正好乘除2^N时,可用移位 *** 作符代替

  • 移动负数位和移位的数字过大度没有意义
  • 条件运算符
    • 表一?表二:表三(同C的三目运算符)
    • 表1位布尔表达式
    • java中的唯一一个三目运算符
  • 运算符的优先级
    • 用括号去控制,所以不用去刻意的记优先级

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4996055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存