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

一、变量的作用域

  • 测试代码:
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” 先两个基本类型做加法运算,之后得出的结果与字符串连接都转换成字符串后输出。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏http://www.cnblogs.com

面向对象编程-类

面向对象编程OOP (object-oriented programming)是最有效的软件编写方法之一,面向对象是利用“类”和“对象”来创建各种模拟来实现对真...

30413
来自专栏技术博客

编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]

  字符串应该是所有编程语言中使用最频繁的一种基础数据类型。如果使用不慎,我们就会为一次字符串的操作所带来的额外性能开销而付出代价。本条建议将从两个方面来探讨如...

874
来自专栏源哥的专栏

BASE64编码

附录:BASE64编码的原理(节选自http://www.vbzx.net/ArticleView/vbzx_Article_View_1199.asp)

534
来自专栏梧雨北辰的开发录

Swift学习:构造器(上)

Swift赋予自定义类型更加丰富的功能,一个显著地方就是构造过程。Swift可以为自定义类型设置构造器来初始化一个实例。有关Swift构造器的使用特点可以总结...

2557
来自专栏Java后端技术

这个坑,是时候填上了~

​  这两天,在网上逛的时候,发现了如下的一道面试题,感觉还有蛮有意思的,要是不仔细看还真容易掉到坑里面。第一眼看起来比较绕,所以比较难理解。最终我跳出了这个坑...

461
来自专栏用户2442861的专栏

深入理解java异常处理机制

http://blog.csdn.net/hguisu/article/details/6155636

402
来自专栏WindCoder

Java基础小结(二)

继承可以使用 extends 和 implements 这两个关键字来实现继承, 而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两...

401
来自专栏大闲人柴毛毛

C++快速入门

引用变量 引用一个变量就是定义了一个变量,和原来的变量使用同一个值。引用变量将值改变,原来这个变量的值也随之改变。 它和传地址的性质一致。 /** *定义一...

2355
来自专栏开发与安全

从零开始学C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例

一、适配器 三种类型的适配器: 容器适配器:用来扩展7种基本容器,利用基本容器扩展形成了栈、队列和优先级队列 迭代器适配器:(反向迭代器、插入迭代器、IO流迭代...

1890
来自专栏Java架构师进阶

Java 常见的 30 个误区与细节!

1、在Java中,没有goto语句。因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用。同时,为了避免程序员自行使用go...

663

扫码关注云+社区