当前位置: 首页 > news >正文

java 一些容易忽视的小点-数据类型和运算符篇

注释

  • 文档注释:   以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)
  • 行注释:   以“/*”开头以“*/”结尾,在“/*”和“*/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用

标识符

  • 标识符必须以字母、下划线_、美元符号$开头($符号一般用于系统编译内部类,由系统自动生成,eg:Stack.class Stack$Node.class,意思是Node是Stack的内部类,不推荐coder用于命名)
  • Java 标识符大小写敏感,且长度无限制
  • Java不采用通常语言使用的ASCII字符集,而是采用Unicode这样标准的国际字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等
  • 变量和常量命名规范(规范是程序员的基本准则,不规范会直接损害你的个人形象):

  • 包名:com.公司名.项目名.模块名... 全部小写

  • 所有变量、方法、类名:见名知意

  • 类成员变量:首字母小写和驼峰原则:  monthSalary

  • 局部变量:首字母小写和驼峰原则

  • 常量:大写字母和下划线:MAX_VALUE

  • 类名:首字母大写和驼峰原则:  Man, GoodMan

  • 方法名:首字母小写和驼峰原则: run(), runRun()


 数据类型

  • 基本数据类型
    1. 数值型-

      1. [整型] :byte(1)、 short(2)、int(4)、 long(8)

        1.  如果两个操作数有一个为Long, 则结果也为long

        2. 没有long时,结果为int。即使操作数全为short,byte,结果也是int

        3. 不存在byte,short常量 ,byte b=19; 19是int型,因为太常用,java内部自动会进行显式转换

        4.    

          double d = 2.0e-6*100000000.1;
           System.out.println(d);
          
          结果:200.0000002


             

      2. [浮点型]:float(4)、 double(8)

        • 不要使用浮点数进行比较,浮点数因为精度问题可能出错,如果要精确计算用BigDecimal

          float d1 = 423432423f;

          float d2 = d1+1;d2是等于d1的

        • 如果判断两个浮点数是否相等,但不需要精确计算的时候应该使用(f1-f2)< 1e-N 而不是使用(f1==f2),特别是在使用浮点数进行for循环的时候,切记使用(f1-f2)<1e-N

          
          示例代码:
          
          double d = 0.001;
          for (double i = 0;  i<d ; i += d/10) {
          
          }
          这样写是错误的,极有可能出现数学意义上i>d的情况,因为计算机在存取浮点数时是有精度损失的
          
          正确的写法应该是类似下面的写法
          
          double d = 0.001;
          for (double i = 0;  (d-i)>1e-9 ; i += d/10) {
          
          }
          

           

        • float数值要加F/f

        • double转float的时候采取的是四舍五入原则,double和float转整型时是截尾取整,而若要选用四舍五入则可以使用Math.round(参数)方法

        • 因为精度问题,看起来相等的float值和double值不一定相等

          eg:  float f=0.4f; double d = 0.4;      f > d ; f=0.40000000059604645 d=0.400000000000000000;
        • float 的最小值不是Float.MIN_VALUE(代表float能表示的最小精度 1.4E-45),float的最小值是-Float.MAX_VALUE
    2. 字符型- char(2)

      1. 'a' != "a" 前者是字符,后者是字符串

      2. char ch='';是错的,char里面不能存NULL,ch=' '才是正确的,里面存了个空格

      3. char进行运算时,会转成int进行计算 eg:'2'+'2'=100

      4. char的取值范围非负,所以与其他类型之间没有包含关系无法自动类型转换。char转换为int,long时进行无符号拓展

    3. 布尔型-boolean(1位 或 1byte,不同编译器并不一样,官方也没有说明,更广泛的说法是后者 1 byte)

      1. 不是C语言,0和1并不代表true/false

      2. java中不允许if(a=b),除非a和b都是Boolean值,这时相当于执行下面语句

        boolean a = true;
        boolean b = false;
        
        
        
        if(a=b){
            system.out.printf("false");
        }
        
        
        /*
            if(a=b) 等价于 a=b; if(a);
        
        */
        
        
        /*
            int m = 2;
            int n = 4;
        
            if(m=n)是错误的
        
        */

         

  • 引用数据类型()
  1. 接口
  2. 数组
    1. 数组的申明及初始化
      
      int[] arr = new int[5];
      
      int[] arr = {1,2,3,4};
      
      /*不允许分开写,下面是错误的
         
           int[] arr;
          arr={1,2,3,4}
      
      */
      
      int[] arr = new int[]{1,2,3,4}; //注意右边不需要指明长度
      
      //允许这样写
      
      int[] arr;
      arr = new int[]{1,2,3,4} 

       2.注意:arr.length是数组长度,不一定是元素长度,数组内部可能是空的,但length还是会计数

       

 

注意:基本数据类型变量是不会自行初始化

          但引用数据类型会,整型为0,boolean为false,字符型&字符串型为NULL(unicode的0),object为NULL


运算符

  1. 位运算符
    1. &(按位与) 和 |(按位或)既是位运算符也是逻辑运算符
    2. 如果两侧操作数都是boolean类型就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符
    3. &(按位与) |(按位或)~(按位取反) ^(按位半加,不进位) 异或“相同取0,相异取1”
  2. 逻辑运算符
    1. & 和 &&都是与运算符,&&是短路运算符,一假直接跳出
    2. | 和 ||都是或运算符,通理
  3. 关系运算符
    1. =是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。

    2. ==、!= 是所有(基本和引用)数据类型都可以使用

    3. > 、>=、 <、 <= 仅针对数值类型(byte/short/int/long,  float/double。以及char)

  4. 扩展赋值运算符

    1. 自带强转功能 eg:short s =10; s+=10;是正确的

  5. 移位运算符

    1. a>>n(a右移n位),,负数高位补1,正数高位补0,移移位相当于除2

    2. a>>>  n  :     无符号右移,忽略符号位,高空位都以0补齐

    3. 左移和右移都可以与等号组合使用 eg int a =10;a>>=2;意为a右移2位

 


强制类型转换

  1. 不能在布尔类型和任何数值类型之间做强制类型转换
  2. 强制类型转换格式是(int) num, 不是int (num)

变量

  1. 被final修饰的变量,不可变的是变量的引用,不是数值,map等等的内容都可以改
  2. static

转载于:https://www.cnblogs.com/jeasion/p/10758358.html

相关文章:

  • 设计模式--代理(Proxy)模式
  • 系统设计(系列二)--现上问题整理(云崩溃和服务不可用)
  • 医疗行业邮件服务器架设方案
  • Python 代码片段收藏
  • IOS--UISwitch的使用方法
  • Netty防止内存泄漏措施
  • GraphGL教程
  • 魔戒三曲,黑暗散去;人皇加冕,光明归来
  • Phpcms所有系统变量列表 Phpcms V9 文件目录结构
  • node 版本过低
  • C# WinForm开发系列 - DataGridView 使用方法集锦
  • 从图形到像素:前端图形编程技术概览
  • BZOJ2802 [Poi2012]Warehouse Store
  • 七、将你的docker镜像上传到docker hub
  • OpenGL tutorial资源在mac yosemite下的cmake生成工程问题
  • [deviceone开发]-do_Webview的基本示例
  • canvas 高仿 Apple Watch 表盘
  • Hexo+码云+git快速搭建免费的静态Blog
  • JSDuck 与 AngularJS 融合技巧
  • MySQL用户中的%到底包不包括localhost?
  • Netty 4.1 源代码学习:线程模型
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python进阶细节
  • Sublime text 3 3103 注册码
  • vuex 学习笔记 01
  • 爱情 北京女病人
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 服务器从安装到部署全过程(二)
  • - 概述 - 《设计模式(极简c++版)》
  • 通过npm或yarn自动生成vue组件
  • 微信小程序实战练习(仿五洲到家微信版)
  • 一个完整Java Web项目背后的密码
  • 阿里云ACE认证之理解CDN技术
  • # Panda3d 碰撞检测系统介绍
  • #Lua:Lua调用C++生成的DLL库
  • $GOPATH/go.mod exists but should not goland
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (3)STL算法之搜索
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (LeetCode) T14. Longest Common Prefix
  • (笔试题)合法字符串
  • (多级缓存)缓存同步
  • (二)WCF的Binding模型
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (未解决)macOS matplotlib 中文是方框
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET delegate 委托 、 Event 事件
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .Net Remoting常用部署结构
  • .NET 常见的偏门问题
  • .net 调用php,php 调用.net com组件 --
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .net开发时的诡异问题,button的onclick事件无效
  • .stream().map与.stream().flatMap的使用