java基础-02数据类型
基本类型
整数
byte
- byte 数据类型是8位、有符号的,以二进制补码表示的整数
- 最小值是 -128(-2^7)
- 最大值是 127(2^7-1)
- 默认值是 0
- byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
- 例子:byte a = 100,byte b = -50
short
- short 数据类型是 16 位、有符号的以二进制补码表示的整数
- 最小值是 -32768(-2^15)
- 最大值是 32767(2^15 - 1)
- Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
- 默认值是 0
- 例子:short s = 1000,short r = -20000。
int
- int 数据类型是32位、有符号的以二进制补码表示的整数
- 最小值是 -2,147,483,648(-2^31)
- 最大值是 2,147,483,647(2^31 - 1)
- 一般地整型变量默认为 int 类型
- 默认值是 0
- 例子:int a = 100000, int b = -200000
long
- long 数据类型是 64 位、有符号的以二进制补码表示的整数
- 最小值是 -9,223,372,036,854,775,808(-2^63)
- 最大值是 9,223,372,036,854,775,807(2^63 -1)
- 这种类型主要使用在需要比较大整数的系统上
- 默认值是 0L
- 例子: long a = 100000L,Long b = -200000L
- "L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
小数
float
- float 数据类型是单精度、32位、符合IEEE 754标准的浮点数
- float 在储存大型浮点数组的时候可节省内存空间
- 默认值是 0.0f
- 浮点数不能用来表示精确的值,如货币(用BigDecimal)
- 例子:float f1 = 234.5f。
double
- double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数
- 浮点数的默认类型为double类型
- double类型同样不能表示精确的值,如货币(用BigDecimal)
- 默认值是 0.0d
- 例子:double d1 = 123.4
其它
char
- char类型是一个单一的 16 位 Unicode 字符,可以看做无符号整数。
- 最小值是 \u0000(即为0)
- 最大值是 \uffff(即为65,535 , 2^16 -1)
- char 数据类型可以储存任何字符
- 例子:char letter = 'A'
boolean
- boolean数据类型表示1个比特位的信息
- 只有两个取值:true 和 false
- 这种类型只作为一种标志来记录 true/false 情况
- 默认值是 false
- 例子:boolean one = true
引用类型
- 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
字符串
- String 类是不可改变的,如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
- 直接赋值初始化,如果常量池(哈希表,key是字符串值,value是对象地址)存在,返回内存地址,否则创建一个新字符串对象,这叫做 字符串驻留,比如String str1 = "ABC"; 这种构造效率高。
- 使用new 初始化,每次都会创建新字符串对象,String str2 = new String("ABC"); 判断字符串值是否相等,使用equals
- string 的hashcode()计算方式
string的哈希计算公式为 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
取31为权:主要是因为31是一个奇质数,所以31*i=32*i-i=(i<<5)-i,这种位移与减法结合的计算相比一般的运算快很多。
数组
声明数组
String [] arrStr = {"aa","bb"}; // 推荐这种声明方式: 类型[] 变量
String arrStr2[] = {"aa","bb"}; // 类型 变量[] 是c++风格的。
System.out.println(Arrays.toString(arrStr) ); // 输出数组元素
System.out.println( Arrays.toString(arrStr2));
Arrays工具类:
Arrays.toString(arrar):返回数组所有元素
Arrays.fill(array, 5):使用5填充所有的数组元素
Arrays.sort(array1):对整个数组排序
Arrays.equals(array, array1):比较数组array和array1的值是否相同
Arrays.binarySearch(array, key):通过二分查找,key是否在array中
为什么获取数组的长度用 .length (成员变量的形式),而获取String的长度用 .length() (成员方法的形式)?”
因为数组的长度存在对象头中,数组本身是没有length成员变量的。
类和对象
- 类:类是一个模板,它描述一类对象的行为和状态。
- 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。
- 一个源文件中只能有一个public类
- 一个源文件可以有多个非public类
- 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
- 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
- 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
- import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
枚举类型
枚举的定义和使用
//定义枚举类型,使用关键字enum
enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
// 使用枚举
Day day =Day.MONDAY;
枚举的实现原理
- 生成一个类Day,该类继承自Enum
- 枚举中的每一个实例,成为类Day的实例
//反编译Day.class
final class Day extends Enum
{
//私有构造函数
private Day(String s, int i)
{
super(s, i);
}
//前面定义的7种枚举实例
public static final Day MONDAY;
public static final Day TUESDAY;
public static final Day WEDNESDAY;
public static final Day THURSDAY;
public static final Day FRIDAY;
public static final Day SATURDAY;
public static final Day SUNDAY;
private static final Day $VALUES[];
static
{
//实例化枚举实例
MONDAY = new Day("MONDAY", 0);
TUESDAY = new Day("TUESDAY", 1);
WEDNESDAY = new Day("WEDNESDAY", 2);
THURSDAY = new Day("THURSDAY", 3);
FRIDAY = new Day("FRIDAY", 4);
SATURDAY = new Day("SATURDAY", 5);
SUNDAY = new Day("SUNDAY", 6);
$VALUES = (new Day[] {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
});
}
}
补充
二进制中的原码、反码、补码
对于有符号数而言:
二进制的最高位是符号位:0表示正数,1表示负数
正数的原码、反码、补码都一样;
负数的反码 = 它的原码符号位不变,其他位取反(0 ->1 ; 1->0 );
负数的补码 = 它的反码 +1;
0的反码、补码都是0;
在计算机运算的时候,都是以补码的方式来运算的;
使用BigDecimal表示金额
我们可以使用BigDecimal来表示金额,或者是通过将金额的单位变小用整数来表示金额。
// 建议优先使用String构造方法。不要使用double类型的构造函数,否则还是会转为多精度的小数
BigDecimal ba = new BigDecimal("0.03"); // 直接用string
BigDecimal bb = new BigDecimal(Double.toString(0.02)); // double转为string
System.out.printf("%s-%s = %s \n",ba.toString(),bb.toString() , ba.subtract(bb));
参考
- Java 基本数据类型 http://www.runoob.com/java/java-basic-datatypes.html
- 二进制(原码、反码、补码) http://www.cnblogs.com/fuhaots2009/p/3476502.html
- Java中存储金额用什么数据类型 https://blog.csdn.net/z956281507/article/details/79188081
- 关于JAVA中string直接初始化赋值和new的区别 https://www.cnblogs.com/mayj/p/7093526.html
- Java 性能优化之 String 篇 https://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/
- java数组 http://www.runoob.com/java/java-array.html
- 为什么如此获取 Java 数组的长度 https://blog.csdn.net/x_iya/article/details/79229355
- Java基础——枚举详解 https://www.cnblogs.com/kailejun/p/6624471.html
- 深入理解Java枚举类型(enum) https://blog.csdn.net/javazejian/article/details/71333103
java基础-02数据类型的更多相关文章
- java 基础 02 数据类型、运算符、分支结构
内容: (1)数据类型 (2)运算符 (3)分支结构 1.数据类型 java语言中的基本数据类型:byte.short.int.long.float.double.boolean.char. 1.1布 ...
- java基础02 数据类型转
一.回答问题 float f1 = 6.66f; float f2 = (float) 6.67; f1==f2? /** * * @author sun * */ public class Demo ...
- java基础(数据类型,运算符)
java基础之数据类型(变量) java中存在的数据有常量和变量 常量:在程序执行的过程中其值不可以发生改变 常量的分类 字面值常量 字面值常量的分类 常量 描述 字符串常量 用双引号括起来的内容 整 ...
- java基础-引用数据类型之二维数组(Array)
java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...
- java基础-引用数据类型之一维数组(Array)
java基础-引用数据类型之一维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的定义 1>.为什么需要数组 保存一个数据可以定义一个变量,如果要保 ...
- Java基础-引用数据类型之集合(Collection)
Java基础-引用数据类型之集合(Collection) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便 ...
- 小白——java基础之数据类型
PS:此文章为小白提供,大佬请绕道!!!! 首先特别感谢大才哥给我提供这个平台,未来我希望把java这个版块的内容补全. 今天要讲的是数据类型,最最最基础的内容~ java标识符.数据类型.关键字 开 ...
- 【Spring学习】【Java基础回顾-数据类型】
Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: ...
- java基础知识-数据类型及转换
1.java中的常量大体分为两种: <1>字面量常量 <2>自定义常量 2.java中常量(字面量)的分类:<1>,整数常量:直接出现的整数<2>,小数 ...
随机推荐
- springcloud~服务注册与发现Eureka的使用
服务注册与发现是微服务里的概念,也是一个基本的组件,负责服务组件的认证,即实现『你是谁』的功能,在服务注册与发现里,存在两种模式,即服务端发现和客户端发现,咱们今天说的eureka属于客户端发现! 下 ...
- MyBatis-plus二级缓存使用
MyBatis二级缓存使用 注意点: 在最新的3.x版本,实现二级缓存的配置也有了一些改变. 官方建议在service使用缓存,但是你也可以直接在mapper层缓存,这里的二级缓存就是直接在Mappe ...
- BugkuCTF~代码审计~WriteUp
第一题:extract变量覆盖 知识简介 extract()函数语法: extract(array,extract_rules,prefix) 参数 描述 array必需. 规定要使用的数组. ext ...
- 【大数据安全】Apache Kylin 安全配置(Kerberos)
1. 概述 本文首先会简单介绍Kylin的安装配置,然后介绍启用Kerberos的CDH集群中如何部署及使用Kylin. Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spa ...
- [Nodejs] node实现静态文件服务器
node 静态文件处理 一般后端进行静态文件处理都是使用 Apache nginx 等静态 web 服务器,但是既然使用 node 了,就用 node 实现以下静态服务器吧. 之前弄了不少充满艺术的数 ...
- DSAPI TreeView节点增删简化操作
将一行或多行字符串添加到TreeView控件. 函数: 控件.TreeView控件.添加路径节点到TreeView(要添加节点的TreeView控件,字符串或字符串数组) 示例:将一个多行文本添加到T ...
- ACM字符串输入问题
坑死了..竟然被这个问题困扰了大半个学期,今天搜来翻去终于弄明白了一些,以后固定用这几种用法好了不然总出错QAQ实际测试例子就没放了,死记这里就够用了T-T 概念: gets()函数:用来从标准输入设 ...
- 基础知识:if判断、while循环、for循环
今日学习内容 1.if 判断(流程控制的一种) 写重复的代码是程序员最不耻的行为,所以我们需要while循环和for循环 ,^_^! ...
- 20190421-那些年使用过的CSS预处理器(CSS Preprocessor)
写在前面的乱七八糟的前言: emmm,不得不说,早上七点是个好时间,公园里跳广场舞的大妈,街边卖菜刀看报的大爷,又不得不说,广州图书馆是个好地方,该有的安静,该有的人气,听着楼下小孩子的声音,看着周围 ...
- wordpress 角色权限
自带多媒体库上传权限:edit_other_pages