String类型的基本使用
String是引用数据类型,变量定义的格式为:String 变量名 = "";
""中的内容可以是任意的,叫做字符串,与char不同,char类型叫做字符,里面只能有一个内容。
String的运算规则,在和基本数据类型进行运算时,会进行拼接的操作。
例如:
public class index {
public static void main(String[] args) {
String name = "小飞";
int age = 18;
//输出结果为小飞18
System.out.println(name + age);
}
}
注意:
public class index {
public static void main(String[] args) {
String name = "小飞";
int a = 10;
char b = 'a';
//输出结果为107小飞
System.out.println(a + b + name);
//输出为小飞10a
System.out.println(name + a + b);
}
}
有String类型参与运算时才会进行拼接。
进制的理解
二进制转换十进制
二进制:以0b或者0B开头0,1组成 例如:0b0111
八进制:以0开头 0-7组成 例如:076
十六进制:以0x或者0X开头0-10,a-f组成 (不区分大小写) 例如:0x1A
进制之间的转换这里只列举一个,二进制转换为十进制,我们以byte为例,占用1个字节,1个字节占用8个bit位,
从左往右第一位叫做符号位,0正1负,其余的才是数据。
例如:
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
这个二进制表示的数据转换为十进制为3
因为:1*2^0 + 1*2^1 = 1 + 2= 3,因为符号为是0所以是正整即为3.
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
因为符号为为1,即结果为-3.
原码反码补码
正数的原码反码补码,三码相同。
负数的反码是在原码的基础上,符号位为不变,其余位取反,0变1,1变0.
负数的补码,是在反码的基础上末位加1
为什么要了解原码反码和补码呢,是因为,计算机在计算时,是使用补码在进行计算的。原码和反码是过程,便于我们理解
例如:-3 + 2 ,在计算机内部是怎么计算的。
-3的原码为
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
反码为
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
补码为
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
2的原码反码补码都一样
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
-3的补码加上2的补码为
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
计算后的补码转换为反码为
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
转换为原码为
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
计算:1 * 2^0 + 0 * 2^1 = 1 + 0 = 1,因为符号为为1,即为负数,结果为-1
通过原码补码反码,就可以解释为什么在进行强制类型转换时,如果超出被强转类型的范围会导致的精度缺失的问题
例如:
public class index {
public static void main(String[] args) {
int a = 129;
byte b = (byte)a;
//结果为-127
System.out.println(b);
}
}
原因:129是int类型,占用四个字节,32个bit位。
129在4个字节中的表现形式
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
转换为byte类型时发生截断操作,为
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
我们知道数据在计算机的储存是补码形式存在的,符号为1,为负数,所以上述是-129的补码形式,
反码为
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
原码为:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
计算为-127.
注意:-128比较特殊,补码为10000000,没有原码,反码不能简单的认为是补码-1,它的反码为11111111,在计算时,直接用补码计算。
运算符
算数运算符
+ , -, *, /, %,前++,后++,前--,后--
加减乘除四则运算没什么说的,需要注意的是数据类型的使用。
%(取余)的操作就是求的是余数。
前++是先自增后计算,后++先计算后自增
前--是先自减后计算,后--先计算后自减
例如:
public class index {
public static void main(String[] args) {
int a = 10;
int b = 20;
//++在后,即先计算后自增,a + b = 10 + 20,a = 11
int c = a++ + b;
//++在前,即先自增后计算,a = 12,a + b = 12 + 20 = 32
int d = ++a + b;
System.out.println(c);
System.out.println(d);
System.out.println(a);
}
}
赋值运算符
=:在数学叫做等于号,就是把等号右边的值赋值给左边。
配合+ , -, *, /, %就有了+=,-=,/=,%=
例如:
public class index {
public static void main(String[] args) {
byte a = 10;
//类型自动提升为int
int b = a + 10;
//通过+=计算数据类型不会提升
byte c = a += 10;
System.out.println(c);
}
}
比较运算符
> ,<,>=,<=,==,!=(不等于)
用于比较基本数据类型除了boolean,一般用于比较两个值之间的关系,返回一个布尔值
例如:
public class index {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
//结果为true
System.out.println(a < b);
//结果为false
System.out.println(a > b);
//结果为true
System.out.println(a <= b);
//结果为false
System.out.println(a >= b);
//结果为false
System.out.println(a == b);
//结果为true
System.out.println(a != b);
}
}
逻辑运算符
&(逻辑与),&&(短路与),|(逻辑或),||(短路或),!(非),^(异或)
逻辑运算符操作的都是boolea类型的变量或常量,运算的结果也是boolean类型。
&,&&:符号两边为true,结果才为true,否则为false
|,||:符号两边一边为true,结果就为true,两边为false结果为false
!(非):当布尔类型为true是,结果为false,当布尔类型为false是,结果为true
^(异或):两边布尔值不同时,为true,相同时为false
&与&&的区别为:短路,如果&左边条件表达式为false,依然会执行右边的表达式,则&&就不会执行右边,增加了运行的效率
|,||同上。
条件运算符:
格式为:条件表达式 ? 表达式1 :表达式2
条件表达式的结果为,true或者false
如果为true就执行表达式1,false就执行表达式2
例如:
public class index {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a > b ? a : b;
//结果为20
System.out.println(c);
}
}
标签:java,String,int,补码,System,第二天,println,自学,public
From: https://blog.csdn.net/2302_76794666/article/details/140683438