J2EE | 基础篇 | D02 数据类型、运算符、简单方法

数据类型转换

自动类型转换

规则:数据范围从小到大

byte<short(char)<int<long<float<double

关于基本数据类型转换规则:

  1. 8种基本数据类型除boolean类型之外都可以相互转换.

  2. 小容量向大容量转换叫做自动类型转换:
    byte<short(char)<int<long<float<double

  3. byte,short,char做混合运算的时候,各自都先转换成int在做运算(自动提升为int)
    short b,c;
    short a = b + c;//右边short+short->结果自动转为int
    short a =(short)(b+c);//右边为short,不会自动提升

  4. 大容量向小容量转换是强制类型转换,需要加强制转换符,
    编译虽然通过,运行期可能损失精度。谨慎使用。

  5. 如果整数没有超出byte,short,char的取值范围,可以直接将这个整数赋值给byte,short,char(编译器的常量优化)

  6. 多种数据类型做混合运算,先转换成容量最大的那种再做运算。

数据溢出:

byte的存储范围是-128-127的整数范围,那么如果有如下语句:
byte a = (byte)130;
结果会是多少呢?java是如何处理强制类型转换的溢出处理呢?
在计算机中,所有的数据都是存储的补码形式,那么130首先被当成int型存储,四个字节32位,它的补码如下:0000 0000 0000 0000 0000 0000 1000 0010,转换为byte类型,进行截取,高字节部分去除,保留低字节部分,得到转换为byte类型的补码为:1000 0010,我们将其转换为源码:补码(1000 0010)->反码(1000 0001)->原码(1111 1110)为-126,所以最后的答案是-126.如果遇到其他的类型转换,也采用类似的处理方法。

基本数据类型之char

ASCII码

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

必须记住:

ASCII值控制字符
480
579
65A
90Z
97a
122z
public class test{
	public static void main(String[] args){
		char a = ',';
		System.out.println(a);//运行结果:,;如果只打印不运算就是字符
		System.out.println(a+0);//运行结果:44;如果发生运算则为对应的ASCll值
	}
}
转义字符

如果想要把一个特殊字符赋值给char类型该怎么办?比如我想将单引号’赋值给一个char类型

char c1 = ‘’’;

上面写法在编译时会报错,正确的方法应该使用转义字符,斜线在java语言中有转义功能,正确的写法如下:

char c1 = ‘’’;

除此之外,通过转义字符可以输出很多字符。

// 斜线在java语言中有转义功能,可以将普通t字符,转换成“制表符”
char c1 = '\t';
System.out.print(c1);

//这是一个普通的“单引号”字符
char c2 = '\'';
System.out.println(c2);

//这是一个普通的“斜线”字符
char c3 = '\\';
System.out.println(c3);

//这是一个普通的“双引号”字符
char c4 = '\"';
System.out.println(c4);
        
//这是一个普通的换行符。
char c5 = '\n';

运算符

算数运算符

通过算数运算符可以完成基本的加减乘除取余的运算操作

+ 求和
- 相减
* 乘积
/ 相除
++ 自加1
- - 自减1
% 取余、求模

a++(先用后自增)
++a(先自增后用)

public class test{
	public static void main(String[] args){
		int i = 0;
		i = i++;
		System.out.println(i);//0
	}
}

这里面涉及到内部的运行步骤:先用一个临时的变量temp保存变量自增前的值,然后变量自增,最后自增表达式会把temp的值作为整个表达式的值返回,也就是把temp的值返回给了i,由于temp保存的是i自增前的值,所以i的值不会变。

赋值运算符

赋值运算符有哪些(有隐式的强制类型转换,不会报错)

=
+= 把左边和右边做加法,然后赋值给左边
-= 把左边和右边做减法,然后赋值给左边
*= 把左边和右边做乘法,然后赋值给左边
/= 把左边和右边做除法,然后赋值给左边
%= 把左边和右边做取余,然后赋值给左边

布尔运算符

布尔运算符有哪些

& 逻辑与 两边都是true,结果是true
| 逻辑或 一边是true,结果就是true
! 逻辑非 取反 !true –> false
^ 逻辑异或 两边只要是不一致就是true
&& 短路与 用法和 & 一样。
|| 短路或 用法和 | 一样

&&和&的区别?

  • &&具有短路效果。如果左边结果是false,则右边不执行。
  • &是无论左边是false还是true,右边都会执行。
    |(逻辑或)和||(短路或)的区别类似

开发中常用&&和||,如果当需求要求无论左边的表达式是true还是false,右边的表达式必须执行,此时必须使用逻辑与,短路与做不到。

三目运算符

有的地方也叫三元运算符
语法:

boolean表达式 ? 表达式1 : 表达式2
解释:
boolean表达式的结果是true,则整个表达式的结果就是表达式1,相反则是表达式2。

方法入门

概述

我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。

方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。

方法定义与调用

定义格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
        方法体语句;
        //如果方法没有返回值的话就不需要return了。
        return 返回值; 
    } 
  • 修饰符:暂时先写 public static。后面再详细的讲解其他的修饰符和作用。
  • 返回值类型:可以是java语言中的任何一种数据类型(基本数据类型和引用数据类型)。如果方法执行结束后,没有任何返回值,返回值类型填写void,即表示没有返回值。
  • 方法名:自己定义,只要符合命名规则即可,使用驼峰方式命名,即第一个单词首字母小写,后面单词的首字母大写,例如sumInt。
  • 参数:
    • 没有参数:如果没有参数,参数类型和参数名可以不写,()里面空着就行
    • 有参数:可以有一个,或多个参数,多个参数用”,”隔开
  • 参数类型:就是参数的数据类型,基本数据类型和引用数据类型都可以
  • 参数名:就是变量名,符合命名规则即可
  • 方法体语句:就是完成功能的代码。
  • return:如果方法的返回值类型不是void,那么在方法体中必须使用return 语句来返回数据。return语句一旦执行,则方法结束,因此在方法中return后面的代码是不会执行的。
  • 返回值:方法执行的结果,将结果返回给调用者。

调用格式:

public static void main(String[] args) {
    //调用定义的方法
    method method();
}
    //定义方法,被main方法调用
public static void method() {
    System.out.println("自己定义的方法,需要被main调用运行");
}
  • public static是修饰符
  • -void表示main方法结束之后不返回任何值
  • main是方法的名字,是sun公司规定好的
  • (String[] args)是形式参数列表,该参数表示是一个String类型的数组,形参的名字是随意的,下面这种写法也是可以的,只不过通常都会将参数名字写成args。

编译器的常量优化

short result = 13;
byte,short,char右侧的常量结果数值,没有超过左侧范围,所以正确。
注意:一旦表达式中有变量参与,就不能进行这种优化了。

int a = 6;
int b = 8;
short result = a + b;//错误
short result = a + 8;//错误
short result = 6 + 8;//正确,编译器会进行优化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值