Java是类型安全的语言,而C++是非类型安全的?【解释】

有过C++开发经验的人会发现,我们可以将0作为false,非零作为true。一个函数即使是bool类型的,但是我们还是可以返回int类型的,并且自动将0转换成false,非零转换成true。代码实例如下:

#include<iostream>
#include<stdlib.h>
using namespace std;

bool fun()//函数返回类型是bool,但是我们在函数中可以返回int类型。
{
    return 1;
}

void main()
{
    int a=1;
    if(a)//a是int类型的,但是可以作bool类型来使用。
    {
        cout<<"C++是非类型安全的。"<<endl;
    }
    system("pause");
}

但是,在java中,我们就不能这样使用了,java中不能做到int类型转bool类型,比如以下代码:

public class TypeSafeTest {
    public static void main(String[] args) {
        int i=1;
        if(i)
        {
            System.out.println("java是类型安全语言");
        }
    }
}

执行上述代码会报如下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from int to boolean
at TypeSafeTest.main(TypeSafeTest.java:4)

上述错误表明在java中int类型不能在自动转变成bool类型了。这就是类型安全的意思。

时间: 2024-10-13 12:38:36

Java是类型安全的语言,而C++是非类型安全的?【解释】的相关文章

java安全沙箱(三)之内置于Java虚拟机(及语言)的安全特性

java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及Java API 本篇博客主要介绍下"内置于Java虚拟机(及语言)的安全特性":其它几类安全机制会在后续博客中陆续介绍. 简介 jvm装载一个类,并且对字节码进行了四趟扫描,这些字节码就能安全地被执行了.然而去了这些安全校验,jvm在执行字节码时还进行了一些内置的安全机制校验.这些安全机制

Java 8 动态类型语言Lambda表达式实现原理分析

Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标. import java.util.function.Consumer; public class Lambda { public static void main(String[] args) { Consumer<String> c = s -> System.out.println(s); c.accept("hello lambd

深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

最近看了一下java 8的一些新特性,其中最重要的莫过于Lambda表达式了,通过一阵子的学习,原本准备自己写一篇博客的,后来阅读了一位学长翻译过来的博客(原文是Brain Goetz的State of Lambda,下面会给出原文链接),觉得写的十分完美,把我想要写的和我没想到的都罗列了出来,就把这个分享给大家了. 注:原译文见  http://lucida.me/blog/java-8-lambdas-insideout-language-features/ 英语原版见:http://cr.

Java编写的C语言词法分析器

这是java编写的C语言词法分析器,我也是参考很多代码,然后核心代码整理起来,放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进.这个词法分析器实现的功能有打开文件.保存文件.打开帮助文档.文本域内容的剪切和复制和黏贴.进行词法分析 程序的项目结构如图,Word类和Unidentifiable类是两个JavaBean类,存放的参数有两个row(整型).word(String),row用于获取行数,word用于获取标识符,LexerFrame是词法分析器的界面类,Analyze封装了进

[转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language-features 本文谢绝转载,如需转载需征得作者本人同意,谢谢. -------------------------------------内容分割线--------------------------------------------------------- 关于 本文是深入

Java和c#开发语言的不同点

Java语言和C#语言非常相似,虽然内部会有很多区别,提供的API也不一样,但开发一个具体功能点的思路常用的都差不多,由于对比较新的技术和特性开发过程中接触不多,我所遇到的不同点包括: 1.Java包的名字是和物理文件位置一一对应的, C#里命名空间可以随便写,并且编译出来的程序集也可以随便更改,可以不和命名空间保持一致,程序集和JAVA里单独打出来的jar包是差不多的意思. 2.JAVA的一个文件只能有一个公共类,而C#可以多个公共类在一个文件里. 3.如果找到一个JAR包,Java查看新ja

Java在Web开发语言上败给了PHP(转)

PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java已经输掉了Web开发语言的战争,PHP是事实上的标准和胜利者. Gutmans的这篇文章在技术界引发了强烈争议,很对人对此有不同的意见,我在这里就阐述一下我对PHP和Java两种语言的看法. 我早先曾经在<Perl.PHP.ASP.JSP技术比较> 一文中对比过PHP和Java的异同,简而言之,P

linux下java程序与C语言程序通过SOCKET通信的简单例子

linux下java程序与C语言程序通过SOCKET通信的简单例子 今天上午实验了java程序与c语言程序通过socket进行通信.由于没学过java,因此只是编写了C语言端的代码,java端的代码是从网上别的文章中找的,经过少量修改后与C语言端程序通信成功. 本例中C语言端作为服务器,java端作为客户端 代码如下: /****************** server program *****************/ #include <stdio.h> #include <sy

java是编程式语言还是解释性语言

一.你可以说它是编译型的.因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有. 二.你可以说它是解释型的.因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了. 三.但是,现在的JVM为了效率,都有一些JIT优化.它又会把.class的二进制代码编译为本地的代码直接运行,所以,又是编译的.像C.C++ 他们经过一次编译之后直接可以编译成操作系统了解的类型,可以直接执行的 所以他们是编译型的语言.没有经过第二次的处理 而Java不