GVKun编程网logo

Java,将null分配给对象和just声明有什么区别(java中null是对象吗)

17

想了解Java,将null分配给对象和just声明有什么区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于java中null是对象吗的相关问题,此外,我们还将为您介绍关于Android一行

想了解Java,将null分配给对象和just声明有什么区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于java中null是对象吗的相关问题,此外,我们还将为您介绍关于Android 一行 getText() 声明有什么区别?、c – 为什么可以将nullptr分配给std :: string?、c# – 将null分配给可空的int – “值”null“对属性无效”、C#和Java有什么区别和联系的新知识。

本文目录一览:

Java,将null分配给对象和just声明有什么区别(java中null是对象吗)

Java,将null分配给对象和just声明有什么区别(java中null是对象吗)

之间有什么区别:

  • Object o = null; 和
  • Object o; (只是声明)

有人可以回答我吗?

答案1

小编典典

这取决于您声明变量的范围。例如,在这种情况下, 局部变量 没有default values,您将不得不手动分配 null
,在这种情况下,由于实例变量获取默认值,因此在 实例变量的 情况 分配null是多余的。

public class Test {    Object propertyObj1;    Object propertyObj2 = null; // assigning null is redundant here as instance vars get default values    public void method() {        Object localVariableObj1;        localVariableObj1.getClass(); // illegal, a compiler error comes up as local vars don''t get default values        Object localVariableObj2 = null;        localVariableObj2.getClass(); // no compiler error as localVariableObj2 has been set to null        propertyObj1.getClass(); // no compiler error        propertyObj2.getClass(); // no compiler error    }}

Android 一行 getText() 声明有什么区别?

Android 一行 getText() 声明有什么区别?

如何解决Android 一行 getText() 声明有什么区别??

有什么区别?它们实际上不是一回事吗?

我收到“无法解析‘视图’中的‘getText’方法”

string = findViewById(R.id.signup_email).getText().toString();

但它工作得很好。

textView = findViewById(R.id.signup_email);

string = textView.getText().toString();

解决方法

你可以这样做

((TextView)findViewById(R.id.signup_email)).getText().toString();

如果您只执行 findViewById,您将获得 View 作为返回的对象,它是 TextView 的父对象,但可以使用的方法有限。因此,如果我们知道我们的视图是什么类型,我们应该将对象强制转换为正确的视图,这样我们就可以执行特定于该视图的各种操作。

在这种情况下,TextView 就是我们将其转换为它的原因,然后我们就可以使用 getText() 中没有的 TextView 类的 View 方法类,因此您在使用该方法时遇到编译错误。

,

首先findViewById(R.id.signup_email)返回View对象,所以当你写这个语句findViewById(R.id.signup_email).getText()这里getText()适用于view对象(显然{{1} }} 类不包含此方法)。

但是,当您分成两行时,此处的 View textView = findViewById(R.id.signup_email); 对象将被类型转换为 ViewTextView(您定义的)对象。所以从这里你会得到这个方法。

如果你想保持单行,你可以使用

EditText
,

findViewById() 返回一个视图。所以视图没有 getText() 方法。所以如果你修改第一个选项如下:

string = ((TextView)findViewById(R.id.signup_email)).getText().toString();

有了这个,它会将视图转换为 TextView,然后您可以调用 get text 方法。

c – 为什么可以将nullptr分配给std :: string?

c – 为什么可以将nullptr分配给std :: string?

所以今天我写了一个相当难以找到的bug,我将std :: string初始化为nullptr(不是指向std :: string的指针,而是值本身).我发现它显然只能在C 11或更高版本中使用clang.
#include <string>
#include <iostream>

using namespace std;
class Meh{
    int x;
};
class Foo
{
private:
  std::string x=nullptr;
  Meh y=nullptr; //remove this line and it compiles
public:
  std::string z=nullptr;
};

int main(void)
{
    Foo f;
    cout << f.z;
    return 0;
}

正如您所看到的,我尝试将nullptr分配给一个类的随机实例,但它不起作用.字符串中有什么神奇之处可以让它工作,这种语法甚至是有效的?我假设在这种情况下我会遇到类型转换错误.

作为参考,我用这个编译:

clang++ test.cpp -O3 -g -fno-inline -std=c++11 -Wall

它没有给出任何形式的警告,但如果不使用C 11则会出错

解决方法

这只是因为 std::string中有 constructors(链接中的数字(5))和0700(链接中的数字(3)),因为 std::string接受了一个const char *,因此nullptr匹配.

在C 11之前(因此在nullptr之前),当您尝试从0或NULL构造时,会出现同样的问题.所有这些情况都是非法的并导致未定义的行为,尽管过去至少有一个STL(RogueWave?)接受它并生成一个空字符串.

c# – 将null分配给可空的int – “值”null“对属性无效”

c# – 将null分配给可空的int – “值”null“对属性无效”

我的视图模型中有这个属性:
[displayName("Region")]
public int? RegionId { get; set; }

我将我的视图模型传递给我的控制器,如果RegionId为空,它将在ModelState.IsValid失败.如果我传递一个整数,它可以正常工作.

错误信息是:

The value ‘null’ is not valid for Region

在我检查ModelState.IsValid之前,我也尝试过调用它,但是我得到了同样的错误:

if (viewmodel.RegionId == null)
    viewmodel.RegionId = (int?)null;

这里有什么问题?为什么不能将null赋值给可空的东西?

解决方法

在Global.asax.cs文件中,在Application_Start方法中,添加以下行:
DataAnnotationsModelValidatorProvider.AddImplicitrequiredAttributeForValueTypes = false;

问题是,即使对于可空值类型,默认情况下,默认ValidatorProvider添加“必需”属性.

C#和Java有什么区别和联系

C#和Java有什么区别和联系

由于公司同是使用.NET和JAVA,而且各个服务集使用接口来进行通信,因此某些例如清算系统、收银台之类的安全性比较高的系统会使用RSA进行加密。因此会涉及到秘钥的转换。所以大概看了下C#的秘钥跟JAVA的秘钥区别。

RSA对于程序本身是没有区别的,其格式都是相同的。对于不同的程序来说,存储使用的语法(包装的类)会有所不同。

RSA语法和语法标准有很多,大的类型大概分为ASN.1、PKCS、X.509。

RSA语法介绍

ASN.1、PKCS是最初的,也是最主要的RSA公钥和私钥的语法标准,被RSA Lab所维护。

ASN.1、PKCS#1都定义了公钥和私钥的类型――序列化的数字。为了下一个层次的抽象(适当的包装),现在一般使用的组合是:PKCS#8的私钥,X.509的公钥 。

PKCS语法主要用于私钥,其内部标准目前有10种。目前JAVA普遍使用的是PKCS#8,用作私钥格式。

X.509语法主要用于公钥,广泛使用于web浏览器和sll。

3种语法标准的公私钥可以实现相互转化,其核心为ASN1语法中的整数值(modulus,PublicExponent,privateExponent )。

.NET使用的是标准的RSA格式,然后将其中的数字base64编码后,生成XML进行存储。

java中使用的是PKCS#8,、X.509的公私钥语法,存储的都是相应的java类自动生成的base64字符串。

由于存储格式的区别,在相互转换、读取的时候,需要理解RSA相关的知识,才能正确使用类来转换。

C#转JAVA

C#中的公私钥使用XML字符串进行存储,读取时直接读入字符串即可。

由于C#使用的是标准的RSA格式,因此JAVA的RSAPublicKeySpec、RSAPrivateKeySpec配置类的核心参数(modulus,PublicExponent,privateExponent )都可以从对应XML中的节点值(Modulus-modulus 、Exponent-PublicExponent 、D-privateExponent )base64解码后获取。然后将其传入JAVA配置类中,然后根据配置类生成相应的RSA公私钥。

JAVA转C#

JAVA中的公私钥使用base64进行存储,解码成字节数组后,需要先生成相应的配置对象(PKCS#8,、X.509 ),根据配置生成RSA公私钥。

byte[] m = Base64.decodeBase64("mX/9zl8rflH5pLaP5P1Qd/9wXwNBSx7OpLlYDnGr7wD0njiDfPSUkgf9oF5NcvZwl24qdJ1SLmrgUtnr+yeXBNZNKaan1xXKISHdlHvbW5G8nJCJW6cuaHMkVw3Y7kwaIIlUdv09vxfjj0AoabttjbtF1kqETzbQ6fK3EN6sY5U=");
byte[] e = Base64.decodeBase64("AQAB");
BigInteger b1 = new BigInteger(1,m);
BigInteger b2 = new BigInteger(1,e);
byte[] m1 = Base64.decodeBase64("3RgqP5YOYUXft8YOlDphyaCoof27MSfTD2eVCFVXB5hatrls1fSUcmUuWuGV970sS6KQZZtyWHQ5970sCzKFlq82He8Uoe0JM3axBvd6PbSGjulUJr62qNW5hgkIEfxSRYl8AQsbbusFtks4obfepsfE02cLmmZepnZAdioWifE=");
byte[] e1 = Base64.decodeBase64("QcSZdLbHakolxX4GAjPnuNmwsBdRIsss7o0qeQMh02GPwoegDfkmW20bv+8Q9FPypEEkYQU/m25ffAFq453QvLegYYi8OvWN+dvgchQRdeb22d+s6xYGGN9DRcPFRE48INde8FBHf/lzVgToV75h1H7g+jB4hLmLeuIuHsB43/0=");
BigInteger b11 = new BigInteger(1,m1);
BigInteger b21 = new BigInteger(1,e1);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(b1,b2);
RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(keySpec);
RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(b11,b21);
RSAPrivateKey priKey = (RSAPrivateKey) keyFactory.generatePrivate(priKeySpec);

私钥

C#使用的是标准的RSA格式,PKCS#1语法中包含了标准RSA格式私钥中的所有整数值。配置对象需要生成PKCS#1语法的RSA对象(RSAPrivateCrtKey),获取对象属性,自行构造私钥XML。

private static String getRSAPrivateKeyAsNetFormat(byte[] encodedPrivateKey) { 
try { 
StringBuffer buff = new StringBuffer(1024); 
PKCS8EncodedKeySpec pvkKeySpec = new PKCS8EncodedKeySpec(encodedPrivateKey); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory.generatePrivate(pvkKeySpec); 
buff.append("<RSAkeyvalue>"); 
buff.append("<Modulus>" + encodeBase64(removeMSZero(pvkKey.getModulus().toByteArray())) + "</Modulus>");
buff.append("<Exponent>" + encodeBase64(removeMSZero(pvkKey.getPublicExponent()toByteArray())) + "</Exponent>");
buff.append("<P>" + encodeBase64(removeMSZero(pvkKey.getPrimeP().toByteArray())) + "</P>");
buff.append("<Q>" + encodeBase64(removeMSZero(pvkKey.getPrimeQ().toByteArray())) + "</Q>");
buff.append("<DP>" + encodeBase64(removeMSZero(pvkKey.getPrimeExponentP().toByteArray())) + "</DP>"); 
buff.append("<DQ>" + encodeBase64(removeMSZero(pvkKey.getPrimeExponentQ().toByteArray())) + "</DQ>");
buff.append("<InverseQ>" + encodeBase64(removeMSZero(pvkKey.getCrtCoefficient().toByteArray())) + "</InverseQ>");
buff.append("<D>" + encodeBase64(removeMSZero(pvkKey.getPrivateExponent().toByteArray())) + "</D>"); 
buff.append("</RSAkeyvalue>"); 
return buff.toString(); 
} catch (Exception e) { 
System.err.println(e); 
return null; 
} 
}

公钥

公钥跟私钥生成步骤相同,配置生成标准的RSA对象(RSAPublicKey)。

private static String getRSAPublicKeyAsNetFormat(byte[] encodedPublicKey) { 
try { 
StringBuffer buff = new StringBuffer(1024);
//Only RSAPublicKeySpec and X509EncodedKeySpec supported for RSA public keys 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
RSAPublicKey pukKey = (RSAPublicKey) keyFactory.generatePublic(new X509EncodedKeySpec(encodedPublicKey)); 
buff.append("<RSAkeyvalue>"); 
buff.append("<Modulus>" + encodeBase64(removeMSZero(pukKey.getModulus().toByteArray())) + "</Modulus>"); 
buff.append("<Exponent>" + encodeBase64(removeMSZero(pukKey.getPublicExponent().toByteArray())) + "</Exponent>"); 
buff.append("</RSAkeyvalue>"); 
return buff.toString(); 
} catch (Exception e) { 
System.err.println(e); 
return null; 
} 
}

以上所述是小编给大家介绍的C#和Java有什么区别和联系,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

关于Java,将null分配给对象和just声明有什么区别java中null是对象吗的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android 一行 getText() 声明有什么区别?、c – 为什么可以将nullptr分配给std :: string?、c# – 将null分配给可空的int – “值”null“对属性无效”、C#和Java有什么区别和联系的相关信息,请在本站寻找。

本文标签: