自动类型转换、强制类型转换、作用域、整型表数范围

一、变量的作用域

  • 测试代码:
public class Test1 {
	private static int value = 1;       // 全局变量
	private static int temp = 0;        // 全局变量
	
	public static void main(String[] args) {
		int value = 2;                     // 局域变量覆盖全局变量
		System.out.println(value);        // 输出的是局域变量,全局变量被屏蔽
		System.out.println(temp);        // 输出的是全局变量,没有在此方法内重新定义故而输出全局变量的值
	}
}

  • 结果截图

二、基本数据类型

  • 整型

通常所说的整型,实际指的是如下四种类型:
byte:一个byte型整数在内存里占8位,表数范围是:-128到127.
short:一个short型整数在内存里占16位,表数范围是:-32768到32767.
int:一个int型整数在内存里占32位,表数范围是:-2147483648到2147483647.
long:一个long型整数在内存里占64位,表数范围是:-9223372036854775808到9223372036854775807.

int是最常用的数据类型,因此通常情况下,一个java整数常量默认就是int类型。
除此之外,有如下两种情形必须指出:

1.如果直接将一个较小的整数常量(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数常量当成byte或者short类型来处理。
2.如果使用一个巨大的整数常量(超出了int类型的表数范围)时,Java不会自动把这个整数常量当成long类型来处理。如果希望系统把一个整数常量当成long类型来处理,应在这个整数常量后增加l或者L作为后缀。通常推荐使用L,因为l很容易跟1搞混。

三、Java中的类型转换


(注:鄙人认为虚线箭头方向应该反向吧,觉得不是的请积极反驳哦!)

有两种类型转换:自动类型转换和强制类型转换
1.自动类型转换
当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换,就如有两瓶水,当把小瓶里水倒入大瓶中时不会有任何问题。上图中,实线箭头左边的数值型可以自动转换为实线箭头右边的数值型。
不仅如此,当把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动转换为字符串类型,即使字符串类型不再是基本类型,而是引用类型。因此,如果希望把基本类型的值转换为对应的字符串,可以把基本类型的值和一个空字符串进行连接。
2.强制类型转换
如果希望把箭头右边的类型转换为左边的类型,则必须使用强制类型转换,强制类型转换的格式是:(target Type)value,强制类型转换的运算符是圆括号。当强制类型转换时,类似于把大瓶子里的水倒进小瓶子里,如果大瓶子里的水不多还好,但如果大瓶子里的水很多,将会引起溢出,从而造成数据丢失。这种转换也被称为“缩小转换(Narrow Conversion)”。
所以说自动类型转换很安全,强制类型转换要小心。

四、字符串连接基本类型

  • 有如下代码:
        int x = 100;
        int y = 200;
        System.out.println("x+y="+x+y);
        System.out.println(x+y+"=x+y");

  • 结果:

  • 原因:
    “x+y=”+x+y 相当于 (“x+y=”+x)+y
    先字符串与基本类型连接,转化为对应的字符型后再与基本类型变量连接,最后输出字符串。
    x+y+“=x+y” 相当于 (x+y)+“=x+y”
    先两个基本类型做加法运算,之后得出的结果与字符串连接都转换成字符串后输出。

原文地址:https://www.cnblogs.com/lxmwb/p/5937054.html