一网打尽各类Java基本数据类型转换

一 自动类型转换
1 自动类型转换图


 
数范围小的向数范围大的进行自动类型转换,如同把小瓶的水倒入大瓶,不会有任何问题。Java支持自动类型转换。
2 代码示例

public class AutoConversion
{
	public static void main(String[] args)
	{
		int a  = 6;
		// int可以自动转换为float类型
		float f = a;
		// 下面将输出6.0
		System.out.println(f);
		// 定义一个byte类型的整数变量
		byte b = 9;
		// 下面代码将出错,byte型不能自动类型转换为char型
		// char c = b;
		// 下面是byte型变量可以自动类型转换为double型
		double d = b;
		// 下面将输出9.0
		System.out.println(d);
	}
}

 
3 运行结果

6.0
9.0
4基本类型的值和字符串连接代码示例

public class PrimitiveAndString
{
	public static void main(String[] args)
	{
		// 下面代码是错的,因为5是一个整数,不能直接赋给一个字符串
		// String str1 = 5;
		// 一个基本类型值和字符串进行连接运算时,基本类型值自动转换为字符串
		String str2 = 3.5f + "";
		// 下面输出3.5
		System.out.println(str2);
		// 下面语句输出7Hello!
		System.out.println(3 + 4 + "Hello!");
		// 下面语句输出Hello!34,因为Hello! + 3会把3当成字符串处理,
		// 而后再把4当成字符串处理
		System.out.println("Hello!" + 3 + 4);
	}
}


5 运行结果

3.5
7Hello!
Hello!34

 

二强制类型转换
1概念介绍
希望把上图的右边类型转化为左边类型,则必须进行强制的类型转换,强制类型转换格式是(targettype)value,类似把大瓶的水倒入小瓶,如果大瓶的水很多,将会引起溢出,从而造成数据丢失。这种转换也称为缩小转换。
2 代码示例

public class NarrowConversion
{
	public static void main(String[] args)
	{
		int iValue = 233;
		// 强制把一个int类型的值转换为byte类型的值
		byte bValue = (byte)iValue;
		// 将输出-23
		System.out.println(bValue);
		double dValue = 3.98;
		// 强制把一个double类型的值转换为int
		int tol = (int)dValue;
		// 将输出3
		System.out.println(tol);
	}
}

3 运行结果

-23
3
4 模拟随机字符串示例

public class RandomStr
{
	public static void main(String[] args)
	{
		// 定义一个空字符串
		String result = "";
		// 进行6次循环
		for(int i = 0 ; i < 6 ; i ++)
		{
			// 生成一个97~122的int型的整数
			int intVal = (int)(Math.random() * 26 + 97);
			// 将intValue强制转换为char后连接到result后面
			result = result + (char)intVal;
		}
		// 输出随机字符串
		System.out.println(result);
	}
}

 
5运行结果

rxyelm

 

三 表达式自动提升
1 自动提升概念
当一个算术表达式包含多个基本类型的值时,整个算术表达式的数据类型将会自动提升,提升规则如下
所有byte类型,short类型和char类型将被提升到int类型
整个算术表达式类型自动提升到与表达式中最高等级操作数同样类型
2 代码示例

public class AutoPromote
{
	public static void main(String[] args)
	{
		// 定义一个short类型变量
		short sValue = 5;
		// 下面代码将出错:表达式中的sValue将自动提升到int类型,
		// 则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。
		// sValue = sValue - 2;
		byte b = 40;
		char c = 'a';
		int i = 23;
		double d = .314;
		// 右边表达式中在最高等级操作数为d(double型)
		// 则右边表达式的类型为double型,故赋给一个double型变量
		double result = b + c + i * d;
		// 将输出144.222
		System.out.println(result);
		int val = 3;
		// 右边表达式中2个操作数都是int,故右边表达式的类型为int
		// 因此,虽然23/3不能除尽,依然得到一个int整数
		int intResult = 23 / val;
		System.out.println(intResult); // 将输出7
		// 输出字符串Hello!a7
		System.out.println("Hello!" + 'a' + 7);
		// 输出字符串104Hello!
		System.out.println('a' + 7 + "Hello!");
	}
}

 
3 运行结果

144.222
7
Hello!a7
104Hello!

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
深刻理解IdentityHashMap: http://donald-draper.iteye.com/blog/2326264 方法说明: public staticK,V MapK,V unmodifiableMap(Map?extendsK,?extendsVm) 返回指定映射的不可修改视图。此方法允许模块为用户提供对内部映射的“只读”访问。 在返回的映射上执行的查询操作将“读完”指定的映射。试图修改返回的映射 (不管是直接修改还是通过其collection视图进行修改)将导致抛出Unsupporte

storm部署详细步骤 - 2016-09-24 19:09:04

1.修改主机名: vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=MASTER   2.修改IP: vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO="static" HWADDR="00:0C:29:FC:62:B6" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="d0731a46-36df-4a
①前端接收enum时,将它放入一个容器script type="text/javascript"var App = {};App.module = 'merchantManage';App.mydata = {"data":[#{list items:memberStatus, as:'status'}{'title':'${status?.title}','name':'${status}'},#{/list}#{list items:memberOperationTypes, as:'target'}
多线程使用的主要目的在于: 1、吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的。简单的说,可能就是一个请求一个线程。或多个请求一个线程。如果是单线程,那同时只能处理一个用户的请求。 2、伸缩性:也就是说,你可以通过增加CPU核数来提升性能。如果是单线程,那程序执行到死也就利用了单核,肯定没办法通过增加CPU核数来提升性能。 鉴于你是做WEB的,第1点可能你几乎不涉及。那这里我就讲第二点吧。 --举个简单的例子: 假设有个请求,这个请求服务端的处理需要执行3个很缓慢的IO操作(比如数据库

博客搬家咯 - 2016-09-24 14:09:07

博客搬家了,最新地址: http://blog.uyiplus.com

关于java的10个谎言 - 2016-09-24 14:09:07

关于java的10个谎言 面试中总遇到各种奇葩的问题,小编在兄弟连网站上找到了下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。 1. System.exit(0)会跳过finally块的执行 System.setSecurityManager(new SecurityManager() {         @Override         public void checkExit(int status) {            

Java 之浅复制和深复制 - 2016-09-24 14:09:07

1 浅复制和深复制区别 浅复制:浅复制只是复制本对象的原始数据类型,如int、float、String,对于数组和对象引用等是不会复制的。因此浅复制是有风险的。 深复制:不但对原始数据类型进行复制,对于对象中的数组和对象引用也做复制的行为,从而达到对对象的完全复制。 2 代码示例 package com;import java.util.ArrayList;public class Test implements Cloneable {// 私有属性private ArrayListString name
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。 java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。 java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得
在eclipse的preferences里,Java-Code style-Code templates,Comments-Type编辑成如下     @author ${name:git_config(user.name)} (${mail:git_config(user.email)})
一 8种基本数据类型和8种包装类的对应关系 基本数据类型 包装类 byte Byte short Short int Interger long Long char Character float Float double Double boolean Boolean   二 自动装箱和自动拆箱 1 概念介绍  自动装箱:把一个基本数据变量直接赋给对应的包装类变量或者赋值给Object变量。  自动拆箱:允许直接把包装类对象直接赋给对应的基本类型变量。 2 代码示例 public class AutoBo