java 一些容易忽视的小点-数据类型和运算符篇
注释
- 文档注释: 以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)
- 行注释: 以“/*”开头以“*/”结尾,在“/*”和“*/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用
标识符
- 标识符必须以字母、下划线_、美元符号$开头($符号一般用于系统编译内部类,由系统自动生成,eg:Stack.class Stack$Node.class,意思是Node是Stack的内部类,不推荐coder用于命名)
- Java 标识符大小写敏感,且长度无限制
- Java不采用通常语言使用的ASCII字符集,而是采用Unicode这样标准的国际字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等
变量和常量命名规范(规范是程序员的基本准则,不规范会直接损害你的个人形象):
包名:com.公司名.项目名.模块名... 全部小写
所有变量、方法、类名:见名知意
类成员变量:首字母小写和驼峰原则: monthSalary
局部变量:首字母小写和驼峰原则
常量:大写字母和下划线:MAX_VALUE
类名:首字母大写和驼峰原则: Man, GoodMan
方法名:首字母小写和驼峰原则: run(), runRun()
数据类型
- 基本数据类型
数值型-
[整型] :byte(1)、 short(2)、int(4)、 long(8)
如果两个操作数有一个为Long, 则结果也为long
没有long时,结果为int。即使操作数全为short,byte,结果也是int
不存在byte,short常量 ,byte b=19; 19是int型,因为太常用,java内部自动会进行显式转换
double d = 2.0e-6*100000000.1;
System.out.println(d); 结果:200.0000002
[浮点型]: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
字符型- char(2)
'a' != "a" 前者是字符,后者是字符串
char ch='';是错的,char里面不能存NULL,ch=' '才是正确的,里面存了个空格
char进行运算时,会转成int进行计算 eg:'2'+'2'=100
char的取值范围非负,所以与其他类型之间没有包含关系无法自动类型转换。char转换为int,long时进行无符号拓展
布尔型-boolean(1位 或 1byte,不同编译器并不一样,官方也没有说明,更广泛的说法是后者 1 byte)
不是C语言,0和1并不代表true/false
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)是错误的 */
- 引用数据类型()
- 类
- 接口
- 数组
数组的申明及初始化 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
运算符
- 位运算符
- &(按位与) 和 |(按位或)既是位运算符也是逻辑运算符
- 如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符
- &(按位与) |(按位或)~(按位取反) ^(按位半加,不进位) 异或“相同取0,相异取1”
- 逻辑运算符
- & 和 &&都是与运算符,&&是短路运算符,一假直接跳出
- | 和 ||都是或运算符,通理
- 关系运算符
=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
==、!= 是所有(基本和引用)数据类型都可以使用
> 、>=、 <、 <= 仅针对数值类型(byte/short/int/long, float/double。以及char)
扩展赋值运算符
自带强转功能 eg:short s =10; s+=10;是正确的
移位运算符
a>>n(a右移n位),,负数高位补1,正数高位补0,移移位相当于除2
a>>> n : 无符号右移,忽略符号位,高空位都以0补齐
左移和右移都可以与等号组合使用 eg int a =10;a>>=2;意为a右移2位
强制类型转换
- 不能在布尔类型和任何数值类型之间做强制类型转换
- 强制类型转换格式是(int) num, 不是int (num)
变量
- 被final修饰的变量,不可变的是变量的引用,不是数值,map等等的内容都可以改
- static
java 一些容易忽视的小点-数据类型和运算符篇的更多相关文章
- java基础知识(一)之数据类型和运算符
1.标识符:JAVA里面我们可以为之命名的就是标识符,如变量.方法.类等. 但是标识符只能包含字母.数字.下划线(_)和美元符号($),并且只能以字母.下划线和美元符号开头不能以数字开头.2.变量:在 ...
- Java 第二章 变量、数据类型和运算符
第二章 变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...
- Java中的变量,数据类型和运算符
变量,数据类型和运算符 1.变量是一个数据存储空间的表示,它是储存数据的基本单元. 如何理解这句话,下面用一个表格可以形象的表达: 变量与房间之间的对应关系 房间名称 变量名 房间类型 变量类型 入住 ...
- Java1变量数据类型和运算符
day02_变量数据类型和运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class jh_01_数据类型说明 { public ...
- IOS开发新手教程(一)-数据类型和运算符
OC语法入门(一) 数据类型和运算符 1.1凝视 凝视和其它语言一样,同意单行 ,多行凝视,一份规范的代码里面须要有一些正式的凝视,例如以下凝视: /* 这是多行 凝视 */ //这是多行凝视 OC语 ...
- PostgreSQL自学笔记:5 数据类型和运算符
5 数据类型和运算符 5.1 PostgreSQL 数据类型介绍 5.1.1 整数类型 整型类型 字节 取值范围 smallint 2字节 -2^15 ~ 2^15 int integer 4字节 - ...
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- 初识java之变量、数据类型和运算符(一)
博友目标: 1.掌握变量的概念 2.引子----会使用常用数据类型 众所周知,每台电脑都有一个内存这么个必不可少的元素,那么到底内存到底是用来干什么的呢?其实啊,计算机内存相当于人类的大脑,计算机在处 ...
- java 数据类型和运算符
1.注释 单行注释: //哈哈哈 多行注释: /* 啦啦啦 */ 文档注释: /** */注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API) ...
随机推荐
- Redis消息之发布与订阅
"发布/订阅"可以实现进程间的消息传递 发布的消息不会持久化,只能收到订阅后的消息,执行subscribe命令后客户端会进入"订阅"状态,处于此状态下的客户端不 ...
- php爬虫最最最最简单教程
php爬虫最最最最简单教程 一.总结 一句话总结:用的爬虫框架,却是用的自己的例子(因为网站结构的变化,作者的例子不一定好用) 爬虫框架 自己例子 1.发现自己的运行效果和作者的不一样怎么办? 耐下性 ...
- C#打印格式
一:C#代码直接打印pdf文件(打印质保书pdf文件) 引用: 代码注释很详细了. private void btn_pdf_Click(object sender, RoutedEventArgs ...
- English trip EM2-PE-6B Teacher:Taylor
课上内容(Lesson) 词汇(Key Word ) engage [ɪn'ɡedʒ] 订婚 miracle ['mɪrəkl] n. 奇迹,奇迹般的人或物:惊人的事例 personality 性 ...
- Android中SharedPerforences的简单使用示例 --Android基础
SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedP ...
- LeetCode--458--可怜的小猪
问题描述: 有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在15分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你 ...
- 20171114xlVba选定单行记录并打印
Public Sub PrintSelectRow() Dim Wb As Workbook Dim iSht As Worksheet Dim rSht As Worksheet Dim pSht ...
- asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务(转)
第一步,搭建开发环境 所需第三方库: aiohttp,异步 Web 开发框架:jinja2,前端模板引擎:aiomysql,异步 mysql 数据库驱动 所需内置库: logging,系统日志:asy ...
- Vue自动化工具(Vue-CLI)的安装
安装VUM 前面学习了普通组件以后,接下来我们继续学习单文件组件则需要提前先安装准备一些组件开发工具.否则无法使用和学习单文件组件. 一般情况下,单文件组件,我们运行在 自动化工具vue-CLI中,可 ...
- python面向对象之 类
内容梗概: 1. 类的成员 2. 类的成员-变量 3. 类的成员-方法 4. 类的成员-属性 5. 私有 1.类的成员class 类名: 方法 def __init__(self, 参数1, 参数2. ...