目录
字面常量
数据类型
int
Long
short
Byte
float
double
char
boolean
类型转换
强转
自动类型转换(隐式)
字符串类型
字符串和整形数字之间进行转换
字面常量
比如 System.Out.println("Hello World") ; 语句,不论程序何时运行,输出的都是 HelloWorld ,其实 "Hello World" 就是字面常量。
常量即程序运行期间,固定不变的量称为常量 ,比如:一个礼拜七天,一年 12 个月等。1. 字符串常量:由""括起来的,比如“12345”、“hello”、“你好”。2. 整形常量:程序中直接写的数字(注意没有小数点),比如:100、10003. 浮点数常量:程序中直接写的小数,比如:3.14、0.494. 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’5. 布尔常量:只有两种true和false6. 空常量:null(后面了讲)
public class Main {public static void main(String[] args) {System.out.println("HelloWorld");System.out.println("A");System.out.println(100);System.out.println(3.14);System.out.println(true);System.out.println(false);}
}
数据类型
在 Java 中数据类型主要分为两类: 基本数据类型 和 引用数据类型 。基本数据类型有四类八种1. 四类:整型、浮点型、字符型以及布尔型2. 八种:整数型: byte short int long小数型: float double字符型: char布尔类型: Boolean
注意:不论是在 16 位系统还是 32 位系统, int都占用4个字节,long都占8个字节整形和浮点型都是带有符号的整型默认为 int 型,浮点型默认为 double字符串属于引用类型 后面会讲到
int
在idea中输入main回车直接出现
输入sout回车
也可以变量名加"."加sout
ps:有没有人知道怎么粘贴图片的时候默认不加水印 每一个图片都加水印很影响观感
在java中,int类型长度为四个字节,4Byte = 8*4bit = 32,就是32位,因为java中,数据类型都是有符号数,那么就是1位符号位, 31位数值位 0表示正数,1表示负数
最大: 01111111 11111111 11111111 11111111
最小: 1000000 00000000 0000000 0000000
因为存的是补码,以上是附属最小值
下面这个是附属最小值-1
11111111 11111111 11111111 11111111
public static void main(String[] args) {int a = 10;System.out.println(a);System.out.println(Integer.MAX_VALUE);System.out.println(Integer.MIN_VALUE);}
10 2147483647 -2147483648
Integer是整数的意思, 在java中叫做包装类型, 输入Integer.可以找到int类型的最大值和最小值
或者按住ctrl,mac上是command, 单击integer, 可以找到
Long
long占8位
long a = 10L;System.out.println(a);
赋值long类型变量时,需要加"L", 不推荐加小写的'l', 因为会认成1
short
short类型, 占2个字节, 有16位
取值范围是-2^15到2^15-1
short a = 19;System.out.println(a);System.out.println(Short.MIN_VALUE);System.out.println(Short.MAX_VALUE);
19 -32768 32767
Byte
只有一个字节
8个比特位
-2^7到2^7-1
byte a = 10;System.out.println(a);System.out.println(Byte.MIN_VALUE);System.out.println(Byte.MAX_VALUE);
10 -128 127
赋值为200时,发现报错,并不会直接像c语言那样溢出, 而是报错,可见java是非常严谨的
以上是整数型,接下来是小数型
float
赋值时需要在屁股加个f, 不然编译器会认为是double类型, 会报错
加了f, 才会认为是float的数据
包装类型是大写的F开头的Float
float a = 12.5f;System.out.println(a);System.out.println(Float.MIN_VALUE);System.out.println(Float.MAX_VALUE);
12.5 1.4E-45 3.4028235E38
注意, ctrl+D或者mac上command+D可以快捷复制一行内容到下一行,并且不占用剪切板
double
double a = 10.5;System.out.println(a);System.out.println(Double.MIN_VALUE);System.out.println(Double.MAX_VALUE);
赋值的时候可以不用加d
10.5 4.9E-324 1.7976931348623157E308
需要注意的是,
System.out.println(1/2);
不会输出0.5而是0
想要输出0.5应该使用
System.out.println(1.0/2);
另外一个需要注意的是,小数没有非常精确的值
double dd = 1.1;System.out.println(dd*dd);
理论上是1.21
实际上是
1.2100000000000002
接下来是字符类型
char
占用两个字节
char ch = 'a';System.out.println(ch);
a
一个汉字占用两个字节
那么 字符类型可以存储汉族
因为java使用的是Unicode编码字符集,包含了许多字符
c语言使用的ASCLL码表示的少得多, 这点需要适应
char ch = '赣';
注意事项 :1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值执行 javac 的时候可能出现以下错误 :此时我们在执行 javac 时加上 -encoding UTF-8 选项即可javac -encoding UTF-8 Test.java
char 的包装类型为 Character
boolean
boolean a = true;System.out.println(a);
java中boolean类型只有两个值, 没有0表示假, 非零表示真
并且 boolean类型没有明确的大小
但是 有些书会说,占用一个字节, 有些说占一个bit位
JVM,Java虚拟机没有规定
Java 虚拟机规范中,并没有明确规定 boolean 占几个字节,也没有专门用来处理 boolean 的字节码指令,在 Oracle公司的虚拟机实现中, boolean 占 1 个字节
类型转换
int a = 10;long b = 100L;b = a; // 可以通过编译a = b; // 编译失败
不允许把8个字节放进4个字节不能大转小,会发生截断只能小转大
强转
int a = 10;long b = 100L;a = (int)b;
int到long,强转,强制类型转换,编译器不管了,这种是等于自己按手印, 编译器不管了
自动类型转换(隐式)
自动类型转换即: 代码不需要经过任何处理,在代码编译时,编译器会自动进行处理 。特点: 数据范围小的转为数 据范围大的时会自动进行 。System.out.println(1024); // 整型默认情况下是intSystem.out.println(3.14); // 浮点型默认情况下是double
int a = 100; long b = 10L; b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值 a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全
隐式类型转换大多存在于小类型到大类型
float f = 3.14F; double d = 5.12; d = f; // 编译器会将f转换为double,然后进行赋值 f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失
int a = 10; long b = 10L; int c = a + b;
报错,解决方法是把a+b的值强制转换为int
int c = (int)(a + b);
还有一个解决方法,是推荐的方法, 使用类型提升,小类型提升为大类型
byte b1 = 10;byte b2 = 20;byte b3 = b1 + b2;
会报错,原因是小于四个字节的,会提升为四个字节的进行运算
因此b3只能使用int赋值了
因为计算机是以4个字节为单位从内存中来存储和读取内容的
【 类型提升小结 : 】1. 不同类型的数据混合运算 , 范围小的会提升成范围大的 .2. 对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算 .
字符串类型
这里先讲解一下字符串类型, 因为很早就会接触到String为字符串类型, 属于引用类型, 因为String类型变量存储的是首元素的地址因为是引用类型,所以首字母是大写 String并且 java中字符串没有以'\0'结尾的说法String str1 = "hello ";String str2 = "world";String str3 = str1 + str2;System.out.println(str3);
字符串的拼接十分方便
int a = 10; System.out.println("a = " + a);java当中的字符串 和其他数据类型进行 + 操作的时候 就是拼接
int a = 10;int b = 20;System.out.println("a = " + a + b);
30==a+b
那这个输出多少呢
a = 1020
这是因为
"a = " + a + b先与"a = " + a进行运算了, 得到a = 10, 然后再与b拼接那怎么输出a+b呢
System.out.println("a = " +( a + b));
那
System.out.println(a+b+"==a+b");
这个段代码呢
从左到右计算的
输出
字符串和整形数字之间进行转换
在有些情况下,需要将字符串和整形数字之间进行转换:
String str = "123";int val = Integer.parseInt(str);System.out.println(val);
在idea中双击shift就能搜索到Integer方法, 找到他的源码
点击structure就能找到
那么怎么从int转回字符串呢
String str = "123";int val = Integer.parseInt(str);System.out.println(val);String str2 = String.valueOf(val);System.out.println(str2);String str3 = val + "";System.out.println(str3);String str4 = Integer.toString(val);System.out.println(str4);